나는 이것을 가지고있다:
.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
해당 레시피는 파일을 고려할 때마다 실행됩니다.
대신 check
Make 대상으로 명시적으로 호출하세요.
obj2.img: obj1.img
$(MAKE) check
make-obj2-from-obj1
따라서 obj2.img
존재하고 이전이 아닌 경우 obj1.img
다시 작성되지 않습니다. 그렇지 않으면 검사가 먼저 실행되고 성공하면 다음으로 실행됩니다 make-obj2-from-obj1
.
이는 검사가 실패하더라도 이 옵션을 사용하여 강제로 재구축할 수 있다는 부수적인 이점도 있습니다 -k
.