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() 等命令创建,且不能是 ALIAS target)时使用。

注意

链接目标时不使用这些选项。请参阅 target_link_options() 命令。

参数

如果指定了 BEFORE,内容将被预先加到属性中,而不是附加到属性中。请参阅策略 CMP0101,它会影响在某些情况下 BEFORE 是否会被忽略。

必须使用 INTERFACEPUBLICPRIVATE 关键字来指定后面参数的 作用域PRIVATEPUBLIC 项将填充 <target>COMPILE_OPTIONS 属性。PUBLICINTERFACE 项将填充 <target>INTERFACE_COMPILE_OPTIONS 属性。后面的参数指定了编译选项。对同一 <target> 的重复调用会按调用的顺序附加项。

在 3.11 版本中新增: 允许对 IMPORTED target 设置 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

另请参阅