2013-04-27 65 views
1

我試圖找出一種方法來配置我的CMake構建以包括一個「乾淨」的目標,將刪除生成目錄中的所有文件,除了那些在一個名爲「模塊」的子目錄。提高CMake的清潔build目錄

爲什麼,你可能會問?那麼,我們的代碼庫目前是基於makefile的,我將它切換到cmake。我目前的設置是在頂層添加一個cmake /目錄,其中包含模塊/子文件夾中所需的宏。然後人們可以從cmake /目錄運行「cmake ..」。

通常,當我在我的CMakeLists.txt中進行更改時,我想確保我以前的cmake運行沒有任何影響,因此最好從頭開始在cmake /目錄中。我不能只是rm -rf ./,因爲有所需的modules /目錄。如果可能,我想要一個簡單的「cmake clean」方法來恢復它。

感謝您的任何意見。

+6

我查看/ cmake的/模塊文件作爲源代碼樹的一部分,將創建一個單獨的空「構建」目錄 - 無論是在項目的根目錄或留給用戶的根目錄之外創建。這樣,你的源代碼就不會混淆你的構建文件。 – Fraser 2013-04-27 12:14:46

+0

是的,你完全正確。也許這只是個人喜好,或者是來自內部源代碼makefiles的遺留思考過程,但我喜歡在cmake /目錄中完成所有這些操作,即使它包含源代碼管理的modules /目錄。 – saboot 2013-04-27 18:00:55

回答

1

我已經在我的一些代碼做到了這一點。在我CMakeLists.txt的底部我添加行

# Add a distclean target to the Makefile 
ADD_CUSTOM_TARGET(distclean COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/distclean.cmake) 

然後我在我的頂層目錄添加一個名爲distclean.cmake文件。此文件包含一個遍歷文件,我想刪除:

# Loop over the directories/files and delete each one 
FOREACH(D ${DEL}) # DEL is a list of the directories and files to delete 
    IF(EXISTS ${D}) 
     FILE(REMOVE_RECURSE ${D}) 
    ENDIF() 
ENDFOREACH() 

你可以看看我的全力distclean.cmake文件here