【问题标题】:How can I use cmake generator expressions for adding compiler flags for different compilers?如何使用 cmake 生成器表达式为不同的编译器添加编译器标志?
【发布时间】:2020-12-16 04:34:54
【问题描述】:

我正在尝试在 CMAKE 3.17.2 中使用类似的东西:

# GCC options
add_compile_options($<$<CXX_COMPILER_ID:GNU>:-fmax-errors=1>)

# clang options
add_compile_options($<$<CXX_COMPILER_ID:AppleClang>:-ferror-limit=2,-Werror=unused-private-field>)

但是,同时添加多个选项似乎是不可能的;我试过用逗号、空格、引号括起来的选项。是否有允许这样做或必须单独添加每个选项的语法?

【问题讨论】:

    标签: c++ gcc cmake clang


    【解决方案1】:

    我认为分号是要走的路。以下是具有多个选项的嵌套条件示例:

    set(MY_COMPILE_OPTIONS
        "$<IF:$<CXX_COMPILER_ID:MSVC>,"
            "/W4;$<$<CONFIG:RELEASE>:/O2>,"
            "-Wall;-Wextra;-Werror;"
                "$<$<CONFIG:RELEASE>:-O3>"
        ">"
    )
    
    target_compile_options(MyTarget PUBLIC "${MY_COMPILE_OPTIONS}")
    

    这意味着:

    • 如果 MSVC && !Release build -> /W4
    • 如果 MSVC && 发布版本 -> /W4 /02
    • 否则如果 !Release build -> -Wall -Wextra -Werror
    • Else if Release build -> -Wall -Wextra -Werror -O3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      相关资源
      最近更新 更多