Make
是什麼導致 Make 刪除中間文件?
我寫了一個Makefile,發現在執行命令時,在Mmakefile中的所有命令都執行完之後,執行
make
了一個意外。rm
但是我沒有rm
在Makefile中寫命令。run-%: d/%.out $< d/%.out: d/%.c gcc -o $(subst .c,.out,$<) $<
執行輸出
make run-a
:gcc -o d/a.out d/a.c d/a.out rm d/a.out
注意尾隨
rm d/a.out
,我沒有寫。什麼情況下會添加自動
rm
命令?
當您這樣做時
make run-a
,該文件d/a.out
是由一個中間目標(的依賴項run-a
)創建的,當主目標 (run-a
) 已建構並且不再需要該中間目標的結果時,該中間目標將被刪除。
d/a.out
您可以通過將其聲明為“珍貴”來阻止刪除:.PRECIOUS: d/%.out
另請參閱GNU Make 手冊中的“隱式規則鏈” :
就像所有其他文件一樣,使用它們的規則重新製作中間文件。但是中間文件有兩種不同的處理方式。
第一個區別是
$$ … $$ 第二個區別是,如果 make 確實創建
b
是為了更新其他內容,它會在不再需要後****刪除b
。因此,在 make 之前不存在的中間文件在 make 之後也不存在。make 通過列印rm -f
顯示正在刪除的文件的命令向您報告刪除情況。