目标编译选项¶
向目标添加编译选项。
target_compile_options(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
添加选项到 COMPILE_OPTIONS 或 INTERFACE_COMPILE_OPTIONS 目标属性。这些选项在编译给定的 <target> 时使用,它们必须由诸如 add_executable() 或 add_library() 之类的命令创建,并且不能是 ALIAS 目标。
参数¶
如果指定了 BEFORE,则内容将被添加到属性中而不是附加到属性中。请参阅政策:policy:CMP0101,它会影响在某些情况下是否会忽略``BEFORE``。
需要 INTERFACE、PUBLIC 和 PRIVATE 关键字来指定以下参数的范围 <Target Usage Requirements>`。 PRIVATE 和 PUBLIC 项将填充 <target> 的 COMPILE_OPTIONS 属性。 PUBLIC 和 INTERFACE 项将填充 <target> 的 INTERFACE_COMPILE_OPTIONS 属性。以下参数指定编译选项。重复调用相同的 <target> 按调用的顺序追加项目。
在 3.11 版本加入: 允许在 IMPORTED 目标 <Imported Targets> 上设置 ``INTERFACE` 项目。
target_compile_options 的参数可以使用语法为“$<...>”的生成器表达式。请参阅 cmake-generator-expressions(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。
也可以看看¶
此命令可用于添加任何选项。但是,为了添加预处理器定义和包含目录,建议使用更具体的命令:command:target_compile_definitions 和:command:target_include_directories。
对于目录范围的设置,有命令:command:add_compile_options。
对于特定于文件的设置,有源文件属性
COMPILE_OPTIONS。