Make

是什麼導致 Make 刪除中間文件?

  • March 19, 2022

我寫了一個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顯示正在刪除的文件的命令向您報告刪除情況。

引用自:https://unix.stackexchange.com/questions/517190