gpt4 book ai didi

c++ - 如何使用 CMake 在特定构建配置中为特定目标设置特定编译器标志?

转载 作者:IT老高 更新时间:2023-10-28 22:33:47 26 4
gpt4 key购买 nike

我有一个 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>")

http://www.cmake.org/cmake/help/git-next/manual/cmake-buildsystem.7.html#build-specification-with-generator-expressions

有关 CMAKE_BUILD_TYPE 的更多信息以及生成器表达式更好的几个原因(例如 IMPORTED 目标配置映射)。

关于c++ - 如何使用 CMake 在特定构建配置中为特定目标设置特定编译器标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com