COMPILE_DEFINITIONS

用于编译源文件的预处理器定义。

COMPILE_DEFINITIONS 属性可以设置为一个由分号分隔的预处理器定义列表,使用 VARVAR=value 语法。不支持函数式定义。CMake 将会自动针对原生构建系统正确转义这些值(请注意,CMake 语言语法可能需要使用转义符来指定某些值)。可以使用 COMPILE_DEFINITIONS_<CONFIG> 这种形式,按配置(per-configuration)来设置此属性,其中 <CONFIG> 为大写的配置名称(例如 COMPILE_DEFINITIONS_DEBUG)。

CMake 会自动舍弃原生构建工具不支持的某些定义。Xcode 不支持对源文件进行按配置(per-configuration)定义。

在 3.26 版本中添加: 项目上的任何前导 -D 都将被删除。

免责声明:大多数原生构建工具对某些值的转义支持不佳。CMake 在许多情况下都有变通方法,但有些值可能无法正确传递。如果某个值似乎没有正确转义,请不要尝试通过向值添加转义序列来解决问题。您的变通方法可能在未来某个改进了转义支持的 CMake 版本中失效。取而代之的是,请考虑在 (已配置的) 头文件中定义宏,然后报告此限制。已知限制包括:

#

几乎在所有地方都已损坏。

;

在 VS IDE 7.0 和 Borland Makefiles 中已损坏。

,

在 VS IDE 中已损坏。

%

在 NMake 中某些情况下已损坏。

& |

在 MinGW 中某些情况下已损坏。

^ < > \ "

在 Windows 上大多数 Make 工具中已损坏。

CMake 不会直接拒绝这些值,因为它们在某些情况下确实有效。请谨慎使用。

COMPILE_DEFINITIONS 的内容可以使用语法为 $<...>cmake-generator-expressions(7)。关于可用表达式的列表,请参阅 cmake-generator-expressions(7) 手册。然而,由于 Xcode 不支持针对每个源文件进行按配置设置,因此在该生成器中不允许使用依赖于构建配置的表达式。

建议在 COMPILE_DEFINITIONS 中优先使用生成器表达式,而不是使用已弃用的 COMPILE_DEFINITIONS_<CONFIG> 属性。