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