c++ - 对于 Cmake,您可以使用 `add_compiler_flags()` 命令修改发布/调试编译器标志吗?

标签 c++ cmake

add_compile_options() 的手册页中,我没有看到任何关于如何修改发布/调试编译器标志的提及。 您可以使用 add_compiler_options() 修改发布/调试编译器标志吗?如果是,如何?

如果不是,推荐的规范方法是修改 the release/debug cmake variables[1] as described here 吗?

[1] 即设置 cmake 变量 CMAKE__FLAGS_(对于 lang c/c++ 它将是:CMAKE_CXX_FLAGS_RELEASE、CMAKE_CXX_FLAGS_DEBUG、CMAKE_C_FLAGS_RELEASE、CMAKE_C_FLAGS_DEBUG)。

最佳答案

如果你想在你的几个项目中重用你的编译器设置,或者你需要区分 C 和 C++ 的编译器选项,我会推荐 CMAKE_C_FLAGS/CMAKE_CXX_FLAGS带有 toolchain file 的变体对于每个支持的编译器(参见例如 herehere)。

但是如果您只需要在您的项目中添加一些额外的 C++ 编译器选项,请使用 add_compile_options() , target_compile_options()target_compile_features()是要走的路。

是的,您可以在此处区分 DEBUGRELEASE

示例

  1. add_compile_options() 命令确实需要 generator expressions :

    add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
    

    add_compile_options(
        "$<$<CONFIG:RELEASE>:-std=gnu99>"
        "$<$<CONFIG:DEBUG>:-std=gnu99 -g3>"
    )
    
  2. 最好同时检查编译器 ID:

    add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:DEBUG>>:/MDd>")
    

    if (MSVC)
        add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
    endif()
    
  3. 让 CMake 决定更好 the correct compiler options为你。所以你可以设置 CXX_STANDARD您的目标需要:

    set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
    

    或给出 compiler feature您的目标需求 target_compile_features()

    add_library(mylib requires_constexpr.cpp)
     # cxx_constexpr is a usage-requirement
     target_compile_features(mylib PUBLIC cxx_constexpr)
    

引用资料

关于c++ - 对于 Cmake,您可以使用 `add_compiler_flags()` 命令修改发布/调试编译器标志吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829152/

相关文章:

c++ - 如何将图像文件夹添加到 CMake 项目以便在 c++ 可执行文件中使用这些图像?

c++ - 虚拟派生函数和包含循环

c++ - stdout 到变量 c/c++

c++ - 在 map 中交换键和值

c++ - 用cmake将第三方静态库组合成独立的静态库?

ubuntu 17.04 cmake x265

c++ - nvcc 错误 : string_view. h:constexpr 函数返回非常量

c++ - 在 C++ 中逐行读取 const 数据

CMake编译错误..(未知CMake命令 "QT4_WRAP_UI")

python - 为什么cmake要用Anaconda的Python?