2011-03-24 30 views

回答

5

您正在通过隐含规则(在这种情况下,您自己定义的隐式规则)链的方式制作a.txt。所以Make认为foo.logintermediate file,并且在它达到目的时删除它。您可以通过声明foo.log次要目标覆盖此行为:

.SECONDARY: foo.log 
+1

.SECONDARY:%.log#does not work,我该怎么办才能使规则一般? – 2011-03-25 00:18:20

+5

如果您想要保留所有中间体,只需声明.SECONDARY的目标:不需要依赖关系。或者,您可以使用通配符.PRECIOUS。即.PRECIOUS:%.log – Sean 2011-03-25 00:22:07

+1

@Sean:奇怪的是通配符与PRECIOUS协同工作,但与SECONDARY协同工作... – Beta 2011-03-25 01:20:09

22

默认情况下,GNU化妆删除中间文件。由于%.txt取决于%.log,因此希望删除.log文件。为了防止这种行为,您可以使用.PRECIOUS或.SECONDARY将它们标记为珍贵。

.PRECIOUS: foo.log 

此外,您可以使它通过使用.SECONDARY没有依赖关系删除中间文件。

.SECONDARY: 

请参阅this部分的GNU make手册。

相关问题