一个最小的例子:
%.txt: foo.log
# pass
%.log:
# pass
运行:
$ make a.txt --dry-run
# pass
# pass
rm foo.log
为什么最后一个动作rm foo.log
?如何摆脱它?
默认情况下,GNU make会删除中间文件。由于%.txt取决于%.log,因此make希望删除.log文件。为了防止这种行为,您可以使用.PRECIOUS或.SECONDARY将它们标记为珍贵。
.PRECIOUS: foo.log
此外,您也可以使用.SECONDARY在没有依赖项的情况下删除任何中间文件。
.SECONDARY:
请参见GNU make手册的this部分。
您正在通过隐式规则链制作a.txt
(在这种情况下,您定义了自己的隐式规则)。因此,Make认为foo.log
为intermediate file,并在达到其目的时将其删除。您可以通过声明foo.log
一个次要目标来覆盖此行为:
.SECONDARY: foo.log