target_compile_definitions¶
向目标添加编译定义。
target_compile_definitions(<target>
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定在编译给定 <target>
时要使用的编译定义。命名的 <target>
必须通过诸如 add_executable()
或 add_library()
之类的命令创建,且不能是 别名目标。
INTERFACE
、PUBLIC
和 PRIVATE
关键字需要指定后面参数的 范围。PRIVATE
和 PUBLIC
项将填充 <target>
的 COMPILE_DEFINITIONS
属性。PUBLIC
和 INTERFACE
项将填充 <target>
的 INTERFACE_COMPILE_DEFINITIONS
属性。后面的参数指定编译定义。对于相同的 <target>
重复调用将按调用的顺序追加项。
在版本 3.11 中添加: 允许在 导入的目标上设置 INTERFACE
项。
target_compile_definitions
的参数可以使用语法 $<...>
的生成器表达式。有关可用的表达式,请参阅 cmake-generator-expressions(7)
手册。有关构建系统属性的定义,请参阅 cmake-buildsystem(7)
手册。
将移除项中任何前导的 -D
。将忽略空项。例如,以下代码段都属于等效情况
target_compile_definitions(foo PUBLIC FOO)
target_compile_definitions(foo PUBLIC -DFOO) # -D removed
target_compile_definitions(foo PUBLIC "" FOO) # "" ignored
target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored
定义可以可选择具有值
target_compile_definitions(foo PUBLIC FOO=1)
请注意,许多编译器将 -DFOO
视为等效于 -DFOO=1
,但其他工具在所有情况下可能无法识别它(例如 IntelliSense)。