我试图在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>)
但是,似乎不可能同时添加多个选项。我已经尝试用逗号,空格,引号将选项括起来。是否有允许这样做的语法,或者每个选项都必须单独添加?

最佳答案

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

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 &&!发布版本-> / W4
  • 如果MSVC && Release版本-> / W4 / 02
  • 如果没有,则发布版本-> -Wall -Wextra -Werror
  • 如果发布版本也可以-> -Wall -Wextra -Werror -O3
  • 关于c++ - 如何使用cmake生成器表达式为不同的编译器添加编译器标志?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63613507/

    10-11 18:31