我有一個CMakeLists,我想使用C運行時的動態版本和其他一些使用靜態版本的目標來構建一些目標。如何在使用CMake的特定構建配置中爲特定目標設置特定的編譯器標誌?
因爲這需要按目標設置,因此默認設置CMAKE_CXX_FLAGS_<Config>
的方法不起作用;這將覆蓋所有目標。
爲此,我試過類似如下:
# @fn set_target_dynamic_crt
# @brief Sets the given target to use the dynamic version of the CRT (/MD or
# /MDd)
# @param ... A list of targets to which this setting should be applied.
function(set_target_dynamic_crt)
if (MSVC)
message (WARNING ${CMAKE_BUILD_TYPE})
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set_target_properties (${ARGN} PROPERTIES COMPILE_FLAGS "/MDd")
else()
set_target_properties (${ARGN} PROPERTIES COMPILE_FLAGS "/MD")
endif()
endif()
endfunction()
然而,這總是選擇發行版本(/MD
),當我查詢生成類型(message
撥打以上),我得到的空字符串。 (我懷疑這是因爲我正在使用Visual Studio生成器;我見過不止一個參考,說CMAKE_BUILD_TYPE
僅適用於makefiles ...)
如何爲每個目標設置這樣的編譯選項?
現在有一個比下面顯示的更好的解決方案來解決這個問題。我發佈了關於它的情況,因爲我跑了同樣的問題,並沒有首先找到你的問題,看到這裏: http://stackoverflow.com/questions/18065299/is-it-possible-in-the-same -cmakelists-txt-to-setup-projects-with-mt-and-other/18068420#18068420 – 2013-08-05 21:53:51