目标编译定义¶
将编译定义添加到目标。
target_compile_definitions(<target>
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定编译给定的 <target> 时要使用的编译定义。命名的 <target> 必须由命令创建,例如 add_executable() 或 add_library() 并且不能是 ALIAS target。
需要 INTERFACE、PUBLIC 和 PRIVATE 关键字来指定以下参数的范围 <Target Usage Requirements>`。 PRIVATE 和 PUBLIC 项将填充 <target> 的 COMPILE_DEFINITIONS 属性。 PUBLIC 和 INTERFACE 项将填充 <target> 的 INTERFACE_COMPILE_DEFINITIONS 属性。以下参数指定编译定义。重复调用相同的 <target> 按调用的顺序追加项目。
在 3.11 版本加入: 允许在 IMPORTED 目标 <Imported Targets> 上设置 ``INTERFACE` 项目。
target_compile_definitions 的参数可以使用语法为“$<...>”的生成器表达式。请参阅 cmake-generator-expressions(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)。