我有一个 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...)
如何为每个目标设置这样的编译选项?
最佳答案
在 CMake 2.8.12 中,我添加了一个 target_compile_options 命令来解决这个需求:
http://public.kitware.com/Bug/view.php?id=6493
http://www.cmake.org/cmake/help/git-master/manual/cmake-generator-expressions.7.html
target_compile_options(tgt PRIVATE "/MD$<$<CONFIG:Debug>:d>")
见
有关 CMAKE_BUILD_TYPE 的更多信息以及生成器表达式更好的几个原因(例如 IMPORTED 目标配置映射)。
关于c++ - 如何使用 CMake 在特定构建配置中为特定目标设置特定编译器标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199904/