【发布时间】:2012-04-29 07:18:38
【问题描述】:
我有一个 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...)
如何为每个目标设置这样的编译选项?
【问题讨论】:
-
现在有一个比下面显示的更好的解决方案来解决这个问题。我也发布了它,因为我遇到了同样的问题并且没有先找到您的问题,请参见此处:stackoverflow.com/questions/18065299/…
标签: c++ visual-c++ cmake