將因式分解設置依賴於配置的設置的代碼。在CMakeLists.txt
的年初
if(NOT SET_UP_CONFIGURATIONS_DONE)
set(SET_UP_CONFIGURATIONS_DONE 1)
# No reason to set CMAKE_CONFIGURATION_TYPES if it's not a multiconfig generator
# Also no reason mess with CMAKE_BUILD_TYPE if it's a multiconfig generator.
if(CMAKE_CONFIGURATION_TYPES) # multiconfig generator?
set(CMAKE_CONFIGURATION_TYPES "Debug;Release;Profile" CACHE STRING "" FORCE)
else()
if(NOT CMAKE_BUILD_TYPE)
message("Defaulting to release build.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose the type of build")
# set the valid options for cmake-gui drop-down list
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;Profile")
endif()
# now set up the Profile configuration
set(CMAKE_C_FLAGS_PROFILE "...")
set(CMAKE_CXX_FLAGS_PROFILE "...")
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "...")
endif()
然後include(..)
這個文件:與此內容創建一個文件,說,SetUpConfigurations.cmake
。
你在哪裏放SetUpConfigurations.cmake
兩個選擇,這取決於你如何組織你的項目庫:
的quick'n'dirty方法:複製並提交此腳本到需要每個項目它。其位置將固定,相對於該項目的CMakeLists.txt
。所以你可以包括它,例如,與include(${CMAKE_CURRENT_SOURCE_DIR}/<...>/SetUpConfigurations.cmake)
守規矩的方式:維護與您的自定義CMake腳本庫,就像這一個。每次生成的cmake
命令一個項目的時候,你傳遞的路徑,這個倉庫在CMAKE_MODULE_PATH
變量:
cmake -DCMAKE_MODULE_PATH=<dir-of-cmake-script-repo> ...
在這種情況下,包括與include(SetUpConfigurations)
(無.cmake
擴展名)的腳本。
約multiconfig發生器是一個多麼注:
Xcode
和Visual Studio
被multiconfig發電機。他們尊重CMAKE_CONFIGURATION_TYPES
的值,但CMAKE_BUILD_TYPE
沒有效果,因爲在處理CMakeLists.txt
時沒有定義具體配置。稍後將在IDE的用戶界面上選擇它。
另一方面,makefile樣式的生成器對CMAKE_CONFIGURATION_TYPES
不感興趣。CMAKE_BUILD_TYPE
定義了配置。這是當CMakeLists.txt
文件處理,但仍然是一個具體的值:從不根據對所CMAKE_BUILD_TYPE
價值的任何決定:按預期在multiconfig發電機
if(CMAKE_BUILD_TYPE STREQUAL "Release") # WRONG!
....
endif()
你的項目將無法正常工作。
爲什麼您需要更改CMAKE_CONFIGURATION_TYPES,您想如何修改它? –
而不是釋放,調試和RelWithDebugInfo,我想有釋放,調試和配置文件。 – Flogo
我現在這樣做: '設置(CMAKE_CONFIGURATION_TYPES 「調試;釋放;簡介」) 集(CMAKE_CONFIGURATION_TYPES 「$ {CMAKE_CONFIGURATION_TYPES}」 CACHE STRING 「支持的配置清單。」) mark_as_advanced(CMAKE_CONFIGURATION_TYPES) 如果(NOT CMAKE_BUILD_TYPE) 消息( 「違約釋放構建」) 集(CMAKE_BUILD_TYPE發佈 CACHE STRING 「選擇構建的類型,選項有:$ {CMAKE_CONFIGURATION_TYPES}」 FORCE) ENDIF()' – Flogo