target_compile_options

为目标添加编译选项。

target_compile_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

将选项添加到 COMPILE_OPTIONSINTERFACE_COMPILE_OPTIONS 目标属性。 这些选项在编译给定的 <target> 时使用,该目标必须通过诸如 add_executable()add_library() 之类的命令创建,并且不得为 别名目标

注意

这些选项在链接目标时不会使用。 有关此信息,请参阅 target_link_options() 命令。

参数

如果指定了 BEFORE,则内容将添加到属性的前面而不是追加到后面。 请参阅策略 CMP0101,该策略影响在某些情况下是否会忽略 BEFORE

INTERFACEPUBLICPRIVATE 关键字是必需的,用于指定以下参数的 作用域PRIVATEPUBLIC 项将填充 <target>COMPILE_OPTIONS 属性。PUBLICINTERFACE 项将填充 <target>INTERFACE_COMPILE_OPTIONS 属性。 以下参数指定编译选项。 对同一 <target> 的重复调用会按调用顺序追加项。

3.11 版本新增: 允许在 导入目标 上设置 INTERFACE 项。

target_compile_options 的参数可以使用生成器表达式,语法为 $<...>。 有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。 有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7) 手册。

选项去重

用于目标的最终选项集是通过累积来自当前目标及其依赖项的使用要求的选项来构建的。 选项集已去重以避免重复。

3.12 版本新增: 虽然去重对单个选项有利,但去重步骤可能会破坏选项组。 例如,-option A -option B 变为 -option A B。 可以使用类似 shell 的引用以及 SHELL: 前缀来指定一组选项。 SHELL: 前缀被删除,其余选项字符串使用 separate_arguments() UNIX_COMMAND 模式进行解析。 例如,"SHELL:-option A" "SHELL:-option B" 变为 -option A -option B

参见