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)。