对于Cmake,你能用`add_compiler_flags()`命令修改release / debug编译器标志吗?

时间:2015-11-20 14:29:14

标签: c++ cmake

add_compile_options()的手册页中,我没有看到如何修改Release / Debug编译器标志。 您可以使用add_compiler_options()修改Release / Debug编译器标志吗?如果是,怎么做?

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

[1] 即设置cmake变量CMAKE_< LANG> _FLAGS_< TYPE> (对于lang c / c ++,它将是:CMAKE_CXX_FLAGS_RELEASE,CMAKE_CXX_FLAGS_DEBUG,CMAKE_C_FLAGS_RELEASE,CMAKE_C_FLAGS_DEBUG)。

1 个答案:

答案 0 :(得分:7)

如果您想通过几个项目重用编译器设置,或者需要区分C和C ++之间的编译器选项,我建议CMAKE_C_FLAGS / CMAKE_CXX_FLAGS变体使用{{3对于每个支持的编译器(请参阅例如toolchain filehere)。

但是如果您只需要在项目中添加一些额外的C ++编译器选项,那么可以采用hereadd_compile_options()target_compile_options()

是的,您可以区分DEBUGRELEASE

<强>实施例

  1. add_compile_options()命令确实需要target_compile_features()

    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为您决定generator expressions更好。因此,您可以设置目标所需的the correct compiler options

    set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
    

    或通过CXX_STANDARD

    提供compiler feature您的目标需求
    add_library(mylib requires_constexpr.cpp)
     # cxx_constexpr is a usage-requirement
     target_compile_features(mylib PUBLIC cxx_constexpr)
    
  4. <强>参考