私はこれを持っています:
.PHONY: check
check:
script-returning-nearly-always-zero
obj2.img: obj1.img check
make-obj2-from-obj1
obj2.img
したがって、論理はobj1より古い(または存在しない場合)再生成したいということです。ただし、「チェック」ターゲットが失敗した場合はエラーが発生したいと思います。
今私の問題は、発電機が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
。