![.PHONY 대상을 기반으로 파일을 항상 다시 생성하지 않도록 make에게 요청하려면 어떻게 해야 합니까?](https://linux55.com/image/224888/.PHONY%20%EB%8C%80%EC%83%81%EC%9D%84%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%ED%95%AD%EC%83%81%20%EB%8B%A4%EC%8B%9C%20%EC%83%9D%EC%84%B1%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8F%84%EB%A1%9D%20make%EC%97%90%EA%B2%8C%20%EC%9A%94%EC%B2%AD%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 이것을 가지고있다:
.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
.