我有一个 CMakeLists,我想在其中使用 C 运行时的动态版本构建一些目标,并使用静态版本构建一些其他目标。
因为这个需要针对每个目标进行设置,所以默认的设置方法是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
仅适用于 makefile...)
如何为每个目标设置这样的编译选项?