我有这个:
.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
我可以以某种方式要求 make仅在obj1.img
更新时重新生成吗?
答案1
做到这一点的唯一方法是不是有check
作为先决条件:
虚假目标不应成为真实目标文件的先决条件;如果是,则每次
make
考虑该文件时都会运行其配方。
相反,check
显式调用作为 Make 目标:
obj2.img: obj1.img
$(MAKE) check
make-obj2-from-obj1
因此,如果obj2.img
存在并且不早于obj1.img
,则不会对其进行重制;否则,首先将运行检查,如果成功,则make-obj2-from-obj1
.
这还有一个附带的好处,即使检查失败,您也可以使用该选项强制重建-k
。