2014-10-29 157 views
1

我有幾個生成源文件的shell腳本。除了最終的結果文件之外,它們還創建了一些工件,如日誌文件,臨時對象以便在出現問題時進行調試等等。我想在選擇「Project - > Clean ...」時將自定義步驟添加到流程運行中,以刪除所有生成的文件。我使用自動生成的Makefiles,並希望避免寫我自己的。並非我不能,我只是寧願花時間做更多的實際工作而不是繁瑣的管理。Eclipse,CDT,在「clean」步驟中添加自定義步驟

回答

0

我發現了以下解決方案:在屬性中,C/C++ Build,Builder Settings,Builder中有「Build command」框和「Use default build command」複選框。

所以它很簡單,雖然很髒 - 我用「customMake」取代了「make」 - 它攔截調用,檢查「乾淨」參數並執行我選擇的腳本。

很有可能有更好的解決方案,但我沒有找到它的運氣。

還有另一種方法。在項目的根目錄下創建文件makefile.targets,並創建規則'clean',通過從Release/Debug /無論目錄執行makefile來重複步驟,並在其中添加自定義步驟。例如:

清潔: - $(RM)$(OBJS)$(C_DEPS)$(存檔)libmpos.a 回聲PLACE自定義的步驟這裏

不幸的是使發出警告規則重寫:

../makefile.targets:2:warning:覆蓋目標clean' makefile:52: warning: ignoring old commands for target乾淨的命令'

但它的工作原理和似乎是比以前更好的解決方案。

1

@jędrzej-dudkiewicz

哇!我花了大約一個工作日來解決完全相同的問題,現在我讀了你的文章... 但我想提出更多的「準確」的問題修復:你需要添加新的規則與假目標,比如說superclean, (例如)makefile.targets文件 - 它將包含在主makefile;那麼您需要在項目屬性對話框的「C/++ Build」的「行爲」頁面中將superclean(將其與其他已列出的目標空間分隔開)添加到相應的「Clean」字段。瞧!

編輯:

不幸的是提到的方法可能會產生一些不良影響。事實是,這是由Eclipse CDT產生的makefile有線路是這樣的:

ifneq ($(MAKECMDGOALS),clean) 
ifneq ($(strip $(C++_DEPS)),) 
-include $(C++_DEPS) 
endif 
ifneq ($(strip $(C_DEPS)),) 
-include $(C_DEPS) 
endif 
ifneq ($(strip $(CC_DEPS)),) 
-include $(CC_DEPS) 
endif 
ifneq ($(strip $(CPP_DEPS)),) 
-include $(CPP_DEPS) 
endif 
ifneq ($(strip $(CXX_DEPS)),) 
-include $(CXX_DEPS) 
endif 
ifneq ($(strip $(C_UPPER_DEPS)),) 
-include $(C_UPPER_DEPS) 
endif 
endif 

,當你將嘗試清潔您的項目make將嘗試包括在*_DEPS變量中列出的文件。這是因爲ifneq ($(MAKECMDGOALS),clean)不起作用,因爲在我們的情況下,$(MAKECMDGOALS)持有superclean clean值。雖然這種變體可以工作還沒有,只要你不會在你的項目的makefile插入規則這樣一個

%.d: %.o 
    ... 

地方。因爲在這種情況下make可能會嘗試生成包含缺席的.d文件。

所以我認爲還有一種方法可以解決這個問題:在項目清理過程中,將(想要刪除的)(自動)生成的文件列表附加到這裏提到的變量之一:

# Other Targets 
clean: 
    -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) oc 
    [email protected] ' ' 

這是自動生成makefile的報價。你可以這樣做:

ifneq ($(findstring clean,$(MAKECMDGOALS)),) 
EXECUTABLES+=$(LIST_OF_THE_GENERATED_FILES) 
endif 
+0

不錯!我從來沒有找到它,雖然我一直在尋找一天,就像你一樣。好吧,我想別人會來,並告訴我們如何以更好的方式做到這一點:) – 2015-01-27 21:27:09