현재 디렉터리에 필수 구성 요소가 없는데 Makefile 규칙이 계속 실행되는 이유는 무엇입니까?

현재 디렉터리에 필수 구성 요소가 없는데 Makefile 규칙이 계속 실행되는 이유는 무엇입니까?

다음과 같은 내용이 있습니다 Makefile.

aaa:bbb
    echo 456
bbb:
    echo 123

bbb디렉터리에 파일이 없으면 aaa파일 유무에 관계없이 이 두 가지 규칙이 실행됩니다.

그런데 왜?

답변1

aaa당신은 상황에 따라 다르다고 하더군요 bbb. 이는 을 만들거나 업데이트하려면 목표를 설정해야 함을 의미 aaa합니다 bbb.

aaabbb현재 디렉터리에 파일로 존재하고 aaa그보다 최신이면 bbb두 대상 모두 다시 빌드할 필요가 없지만 aaa비교하면 더 이상 사용되지 않습니다.bbb 또는 bbb누락된 경우그런 aaa다음 최신 상태인지 확인하기 위해 빌드해야 합니다( bbb손실된 경우 다시 빌드해야 함 bbb).

다음 예에서는 두 대상이 실제로만들다관련 파일이 있는 경우 대상은 두 번째 호출에서 빌드되지 않습니다 make. 파일이 삭제 되면 bbb두 대상이 모두 다시 빌드됩니다.

$ cat Makefile
aaa: bbb
        echo 456
        touch aaa

bbb:
        echo 123
        touch bbb
$ rm -f aaa bbb
$ make
echo 123
123
touch bbb
echo 456
456
touch aaa
$ make
`aaa' is up to date.
$ rm bbb
$ make
echo 123
123
touch bbb
echo 456
456
touch aaa

관련 정보