target_compile_options¶
为目标添加编译选项。
target_compile_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
将选项添加到 COMPILE_OPTIONS
或 INTERFACE_COMPILE_OPTIONS
目标属性。 这些选项在编译给定的 <target>
时使用,该目标必须通过诸如 add_executable()
或 add_library()
之类的命令创建,并且不得为 别名目标。
注意
这些选项在链接目标时不会使用。 有关此信息,请参阅 target_link_options()
命令。
参数¶
如果指定了 BEFORE
,则内容将添加到属性的前面而不是追加到后面。 请参阅策略 CMP0101
,该策略影响在某些情况下是否会忽略 BEFORE
。
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>
添加语言范围的标志,这些标志传递给编译器的所有调用,包括驱动编译和驱动链接的调用。