2011-03-05 125 views
3

想象一下以下情況:CMake的目標設置問題

我有「項目」的文件夾,這個文件夾我有「SRC」文件夾,2個文件「1.cpp」和「2.cpp」的。每一個.cpp產生一個可執行文件。 CMake的生成Makefile後,我希望能夠做到以下幾點:

  • 指定我想建立可執行的「1」或「2」或兩者
  • 指定我想建立在調試的所有可執行文件模式
  • 指定我希望建立在釋放模式的所有可執行文件
  • 指定我想建立在發佈和調試模式

,所以我希望能夠所有可執行文件中寫入以下:

  • (c)作出/任何1
  • (c)作出/什麼2
  • (c)作出/任何全釋放
  • (c)作出/任何所有調試
  • (c)使任何東西全部調試併發布

實現這一目標的最佳方法是什麼? 非常感謝!

+0

指定在cmake文件中或運行make時需要調試/釋放模式是非常不尋常的(如果cmake生成了package/tarball /不管怎麼說 - 也許不是這樣 - 我還沒有這麼做)。通常,在設置特定版本時指定Release/Debug,通過用'cmake-gui'指定'CMAKE_BUILD_TYPE'來指定。您可以使用if檢查構建的類型以包含/排除cmake文件中的項目。我不這樣做,但我確實使用'if(CMAKE_HOST_WIN32)'來避免在Linux上構建特定於win32的代碼,原理是一樣的。 – Steve314 2011-03-05 10:32:57

+0

要一次構建多個配置,我總是使用單獨的構建樹並使用腳本在每個文件夾中調用make。我不會說這是一個好方法,但它可以完成工作。 – Steve314 2011-03-05 10:35:51

+0

感謝您的回覆。我會發布另一個關於一次構建多個配置的問題。 – 2011-03-05 13:36:57

回答

3

您需要知道您的「src」目錄的根目錄中的頂級CMakeLists.txt(使用add_subdirectory)。然後在「src」中,您將需要另一個指定如何編譯可執行文件的CMakeLists.txt。這本身將有可能說,比如:

make 1 2 

至於它可以在cmake的通過變量CMAKE_BUILD_TYPE被指定的調試/釋放模式。但我通常,在頂層,指示它的調試或發行模式,如果未指定變量:

IF(NOT CMAKE_BUILD_TYPE) 
    SET(CMAKE_BUILD_TYPE Debug) 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG") 
ENDIF(NOT CMAKE_BUILD_TYPE) 

編輯生成類型,而無需修改的CMakeLists.txt的另一種方式是做

make edit_cache 

這將帶出一個帶有變量的ncurses對話框,其中包括CMAKE_BUILD_TYPE