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()
等命令创建,且不能是 ALIAS target)时使用。
注意
链接目标时不使用这些选项。请参阅 target_link_options()
命令。
参数¶
如果指定了 BEFORE
,内容将被预先加到属性中,而不是附加到属性中。请参阅策略 CMP0101
,它会影响在某些情况下 BEFORE
是否会被忽略。
必须使用 INTERFACE
、PUBLIC
和 PRIVATE
关键字来指定后面参数的 作用域。PRIVATE
和 PUBLIC
项将填充 <target>
的 COMPILE_OPTIONS
属性。PUBLIC
和 INTERFACE
项将填充 <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
。
另请参阅¶
此命令可用于添加任何选项。然而,对于添加预处理器定义和 include 目录,建议使用更具体的命令:
target_compile_definitions()
和target_include_directories()
。对于目录范围的设置,可以使用此命令:
add_compile_options()
。对于文件特定设置,可以使用源文件属性:
COMPILE_OPTIONS
。此命令会为目标中的所有语言添加编译选项。使用
COMPILE_LANGUAGE
生成器表达式指定每种语言的编译选项。CMAKE_<LANG>_FLAGS
和CMAKE_<LANG>_FLAGS_<CONFIG>
添加语言级标志,传递给编译器的所有调用。这包括驱动编译和驱动链接的调用。