Makefile 与现有目标建立依赖关系,但缺少依赖关系
我有一个makefile,例如:Makefile 与现有目标建立依赖关系,但缺少依赖关系,makefile,gnu-make,Makefile,Gnu Make,我有一个makefile,例如: A : B echo "made A" B : D echo "made B" 这里,B存在,但D不存在(有时存在,有时不存在) 现在如果我执行make,它会对我大叫: make: *** No rule to make target 'D', needed by 'B'. Stop. 是否有正确的行为方式,即: B和D不存在:失败 B存在,D存在并且比B更新,应用配方 B存在,D存在但更老:什么都不要做 如果B存在而D不存在:不要重建B
A : B
echo "made A"
B : D
echo "made B"
这里,B存在,但D不存在(有时存在,有时不存在)
现在如果我执行make,它会对我大叫:
make: *** No rule to make target 'D', needed by 'B'. Stop.
是否有正确的行为方式,即:
- B和D不存在:失败
- B存在,D存在并且比B更新,应用配方
- B存在,D存在但更老:什么都不要做
- 如果B存在而D不存在:不要重建B(您不能),但您可以使用B来构建A
D :
最后,使缺少的D不会失败。因此,现在一切正常,但如果D缺失,则B将被重做,这可以在B配方中测试:
B : D
if [ D ] ; then echo "doing B with D"; fi
但这似乎真的有点骇人听闻……您可以通过将B标记为中间值来绕过从旧D重新生成B的问题:
.INTERMEDIATE : B
然后,您可以删除D的空规则,并匹配“正确”行为的四个标准。谢谢,就是这样!GNU文档说明.INTERMEDIATE.INTERMEDIATE依赖的目标被视为中间文件。请参见隐式规则链,所以我认为它只与隐含的规则有关。