我有一个makefile,例如:
A : B
echo "made A"
B : D
echo "made B"
在这里,B存在,但D不存在(有时,它确实存在,有时它不会)
现在如果我执行make,就会对我大喊: make: * 没有规则来制作' B'所需的目标' D'停止。
有没有办法正确行事,即:
使用带有D作为目标的空行将始终执行构建B的配方,但不管D不能,因此不需要它!
有什么办法吗?
我找到了使用空规则的解决方案
D :
最后,所以缺少D不会失败。所以现在一切都还可以,但是如果缺少D则重做B,这可以在B配方中测试:
B : D
if [ D ] ; then echo "doing B with D"; fi
但它看起来真的很乱......
答案 0 :(得分:3)
您可以通过将B标记为中间值来解决从较旧D重新生成B的问题:
.INTERMEDIATE : B
然后,您可以删除D的空规则,并匹配“正确”行为的四个条件。