如何要求 make 不总是根据 .PHONY 目标重新创建文件?

如何要求 make 不总是根据 .PHONY 目标重新创建文件?

我有这个:

.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

相关内容