2012-05-10 117 views
0

堆棧!Makefile:刪除沒有依賴關係的中間文件

孜孜以求的實驗和搜索沒有找到任何解決這個看似簡單的問題。

在我的build中,.cc文件依賴於.proto文件。在make過程中,.proto文件被轉換成.cc和.h文件,然後收集並構建到可執行文件中。

如何確保在刪除.proto文件時,相應的中間.cc文件會在make過程中自動刪除? (如果不是,它會進入構建的下一個階段,並且在過去造成了問題。)

現在,我只是在刪除所有生成的.cc/.h文件時刪除或重命名一個.proto--這是正確的,但觸發幾乎整個系統的重建。

在此先感謝...!

+0

如果Make完成後立即刪除生成的文件(即完成可執行文件的生成時),就足夠了嗎?直到/除非.proto文件中的一個比可執行文件更新,否則不會重新生成它們。 – Beta

+0

好問題 - 不幸的是,答案是「不是真的」。我經常在IDE(即XCode或Visual Studio 2010)中運行程序 - 它需要在那裏有中間的.cc文件。製作階段只是爲此做好準備。 –

+0

有趣...哪個版本的Make? – Beta

回答

1

你可以寫像clean的規則,但不那麼嚴格:

SOURCES = $(PROTOS:.proto=.cc) 

.PHONY: tidy 
tidy: 
     @rm $(filter-out $(SOURCES), $(wildcard *.cc)) 

然後,您可以手動啓動該規則,或使其可執行的命令,唯一的先決條件。

或者你可以在你的可執行文件的規則中放入相同的命令,但這樣做有點不雅。

+0

哦,這看起來非常可行。事實上,我的makefile實際上並不直接生成可執行文件 - 它會調用XCode或VisualStudio來完成構建的這部分內容,因此將該規則放在該位置實際上非常簡潔 - 「整理在轉移到構建階段之前「。謝謝! –