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