target_compile_options¶
向目标添加编译选项。
target_compile_options(<target> [BEFORE]
{INTERFACE|PUBLIC|PRIVATE} <item>...
[{INTERFACE|PUBLIC|PRIVATE} <item>...]...)
向 COMPILE_OPTIONS 或 INTERFACE_COMPILE_OPTIONS 目标属性添加选项。这些选项在编译给定的 <target> 时使用。该目标必须通过诸如 add_executable() 或 add_library() 等命令创建,且不能是 别名目标 (ALIAS target)。
注意
这些选项在链接目标时不使用。相关信息请参阅 target_link_options() 命令。
参数¶
如果指定了 BEFORE,则内容将被添加到属性之前而非之后。有关在某些情况下 BEFORE 是否会被忽略的影响,请参阅策略 CMP0101。
INTERFACE、PUBLIC 和 PRIVATE 关键字用于指定后续参数的 作用域。PRIVATE 和 PUBLIC 项将填充 <target> 的 COMPILE_OPTIONS 属性。PUBLIC 和 INTERFACE 项将填充 <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。
另请参阅¶
此命令可用于添加任何选项。但是,对于添加预处理器定义和包含目录,建议使用更具体的命令
target_compile_definitions()和target_include_directories()。对于目录范围的设置,请使用
add_compile_options()命令。对于文件特定的设置,请使用源文件属性
COMPILE_OPTIONS。此命令会为目标中的所有语言添加编译选项。请使用
COMPILE_LANGUAGE生成器表达式来指定针对特定语言的编译选项。CMAKE_<LANG>_FLAGS和CMAKE_<LANG>_FLAGS_<CONFIG>添加传递给编译器所有调用的语言范围标志。这包括驱动编译和驱动链接的调用。CheckCompilerFlag模块,用于检查编译器是否支持给定的标志。