CMP0120¶
在版本 3.20 中添加。
已移除 WriteCompilerDetectionHeader
模块。
CMake 版本 3.1 至 3.19 通过重新使用 CMake 对 cmake-compile-features(7)
预处理器检查表中的信息,提供了此模块以生成 C++ 兼容性层。不过
这些细粒度特性已被用于 要求语言标准 的元特性所取代,例如
cxx_std_11
。因此,不会添加任何新的细粒度特性检查,并且项目需要使用其他方式以有条件地使用新的 C++ 特性。该模块将 CMake 的一些实现细节直接暴露给 C++ 翻译单元。
该模块的方法有效地向 CMake 提供一个头文件,从而将标头的版本绑定到 CMake 的版本。许多项目发现,最好通过使用最新版本的 CMake 手动生成本地标头,然后将其与项目源捆绑在一起,从而使用
WriteCompilerDetectionHeader
。
由于包括以上原因,CMake 3.20 及更高版本更愿意不提供 WriteCompilerDetectionHeader
模块。此策略为尚未从该模块移植的项目提供了兼容性。使用该模块的项目应更新为停止使用它。替代方案包括
在项目的源代码中捆绑生成的标头的副本。
使用第三方替代方案,例如 CC0 授权的 Hedley。
放弃对编译器过于老旧而无法提供本机特性的支持。
OLD
此策略的行为是包含弃用的 WriteCompilerDetectionHeader
模块以进行工作。 NEW
行为是包含该模块以失败,就像它不存在一样。
此策略在 CMake 版本 3.20 中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 将发出警告,并使用 OLD
行为。
注意
策略的OLD
行为根据定义已弃用 by definition
,且在未来版本的 CMake 中可能会被移除。