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

Tre*_*ith 4 c++ cmake

在手册页中add_compile_options()我没有看到任何提及如何修改Release/Debug编译器标志.你可以add_compiler_options()用来修改Release/Debug编译器标志吗?如果有,怎么样?

如果不是,推荐的规范方法是修改发布/调试cmake变量[1],如下所述

[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).

Flo*_*ian 8

如果你想通过几个项目重用你的编译器设置,或者你需要区分C和C++之间的编译器选项,我建议你为每个支持的编译器使用CMAKE_C_FLAGS/ CMAKE_CXX_FLAGSvariant和一个工具链文件(参见例如这里这里).

但如果你只是需要一些额外的C++编译器选项,在您的项目,同时add_compile_options(),target_compile_options()或者target_compile_features()是要走的路.

是的,你可以区分DEBUGRELEASE那里.

例子

  1. add_compile_options()命令确实采用生成器表达式:

    add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    add_compile_options(
        "$<$<CONFIG:RELEASE>:-std=gnu99>"
        "$<$<CONFIG:DEBUG>:-std=gnu99 -g3>"
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 最好还要检查编译器ID:

    add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:DEBUG>>:/MDd>")
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    if (MSVC)
        add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
    endif()
    
    Run Code Online (Sandbox Code Playgroud)
  3. 让CMake 为您决定正确的编译器选项会更好.因此,您可以设置CXX_STANDARD目标所需的:

    set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
    
    Run Code Online (Sandbox Code Playgroud)

    或者给出目标需要的编译器功能target_compile_features()

    add_library(mylib requires_constexpr.cpp)
     # cxx_constexpr is a usage-requirement
     target_compile_features(mylib PUBLIC cxx_constexpr)
    
    Run Code Online (Sandbox Code Playgroud)

参考

  • 只是为了确定 - 这仍然是 2020 年/cmake 3.17 的推荐方式吗? (2认同)

归档时间:

查看次数:

4268 次

最近记录:

6 年,8 月 前