Bil*_*eal 16 c++ cmake visual-c++
我有一个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()
Run Code Online (Sandbox Code Playgroud)
但是,这总是选择发布版本(/MD),当我查询构建类型(message上面的调用)时,我得到空字符串.(我怀疑这是因为我使用的是Visual Studio生成器;我看过不止一个引用CMAKE_BUILD_TYPE只是为了makefile ...)
如何为每个目标设置这样的编译选项?
ste*_*ire 31
在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>")
Run Code Online (Sandbox Code Playgroud)
看到
有关CMAKE_BUILD_TYPE的更多信息以及生成器表达式更好的几个原因(例如,IMPORTED目标配置映射).
CMAKE_BUILD_TYPE仅对单配置生成器有效。多配置生成器(MSVC 和 Xcode)可以在一个构建目录中构建多个配置,因此该CMAKE_BUILD_TYPE标志没有意义。
COMPILE_FLAGS 目标属性不区分不同的配置(有关更多信息,请参阅kitware bugtracker)。
解决方法是有两个构建目录,类似于人们使用 Makefile 生成器的方式,并在构建用于分发的二进制文件时定义一个附加标志。(即Release配置)
| 归档时间: |
|
| 查看次数: |
19271 次 |
| 最近记录: |