.PHONY 대상을 기반으로 파일을 항상 다시 생성하지 않도록 make에게 요청하려면 어떻게 해야 합니까?

.PHONY 대상을 기반으로 파일을 항상 다시 생성하지 않도록 make에게 요청하려면 어떻게 해야 합니까?

나는 이것을 가지고있다:

.PHONY: check
check:
    script-returning-nearly-always-zero

obj2.img: obj1.img check
    make-obj2-from-obj1

obj2.img따라서 논리 는 obj1보다 오래된 경우(또는 존재하지 않는 경우) 다시 생성하고 싶다는 것입니다 . 그러나 "check" 대상이 실패하면 오류가 발생하고 싶습니다.

이제 내 문제는 발전기가 obj2.img항상 실행된다는 것입니다. check때문 이 아닐까 싶습니다 .PHONY.

obj2.img업데이트 시 에만 obj1.img재생성하도록 make를 요청할 수 있나요?

답변1

이를 수행하는 유일한 방법은 다음과 같습니다.아니요가지다check전제 조건으로:

가짜 대상은 실제 대상 파일의 전제조건이 되어서는 안 됩니다. 만약 그렇다면 make해당 레시피는 파일을 고려할 때마다 실행됩니다.

대신 checkMake 대상으로 명시적으로 호출하세요.

obj2.img: obj1.img
    $(MAKE) check
    make-obj2-from-obj1

따라서 obj2.img존재하고 이전이 아닌 경우 obj1.img다시 작성되지 않습니다. 그렇지 않으면 검사가 먼저 실행되고 성공하면 다음으로 실행됩니다 make-obj2-from-obj1.

이는 검사가 실패하더라도 이 옵션을 사용하여 강제로 재구축할 수 있다는 부수적인 이점도 있습니다 -k.

관련 정보