target_compile_definitions

向目标添加编译定义。

target_compile_definitions(<target>
  <INTERFACE|PUBLIC|PRIVATE> <definition>...
  [<INTERFACE|PUBLIC|PRIVATE> <definition>... ...])

指定编译给定 <target> 时使用的编译定义。指定的 <target> 必须是由诸如 add_executable()add_library() 等命令创建的,且不能是 别名目标 (ALIAS target)

必须使用 INTERFACEPUBLICPRIVATE 关键字来指定后续参数的 作用域PRIVATEPUBLIC 项将填充 <target>COMPILE_DEFINITIONS 属性。PUBLICINTERFACE 项将填充 <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)。

另请参阅