%.txt: foo.log
# pass
%.log:
# pass
運行:
$ make a.txt --dry-run
# pass
# pass
rm foo.log
爲什麼最後一個動作是RM foo.log? 如何擺脫它?
%.txt: foo.log
# pass
%.log:
# pass
運行:
$ make a.txt --dry-run
# pass
# pass
rm foo.log
爲什麼最後一個動作是RM foo.log? 如何擺脫它?
您正在通過隱含規則(在這種情況下,您自己定義的隱式規則)鏈的方式製作a.txt
。所以Make認爲foo.log
是intermediate file,並且在它達到目的時刪除它。您可以通過聲明foo.log
次要目標覆蓋此行爲:
.SECONDARY: foo.log
默認情況下,GNU化妝刪除中間文件。由於%.txt取決於%.log,因此希望刪除.log文件。爲了防止這種行爲,您可以使用.PRECIOUS或.SECONDARY將它們標記爲珍貴。
.PRECIOUS: foo.log
此外,您可以使它通過使用.SECONDARY沒有依賴關係刪除中間文件。
.SECONDARY:
請參閱this部分的GNU make手冊。
.SECONDARY:%.log#does not work,我該怎麼辦才能使規則一般? – 2011-03-25 00:18:20
如果您想要保留所有中間體,只需聲明.SECONDARY的目標:不需要依賴關係。或者,您可以使用通配符.PRECIOUS。即.PRECIOUS:%.log – Sean 2011-03-25 00:22:07
@Sean:奇怪的是通配符與PRECIOUS協同工作,但與SECONDARY協同工作... – Beta 2011-03-25 01:20:09