CMP0120ΒΆ
New in version 3.20.
The WriteCompilerDetectionHeader
module is removed.
CMake versions 3.1 through 3.19 provide this module to generate a
C++ compatibility layer by re-using information from CMake's table of
preprocessor checks for cmake-compile-features(7)
. However:
Those granular features have been superseded by meta-features for Requiring Language Standards such as
cxx_std_11
. Therefore no new granular feature checks will be added and projects will need to use other means to conditionally use new C++ features.The module exposes some of CMake's implementation details directly to C++ translation units.
The module's approach effectively provides a header file with CMake, thus tying the version of the header to the version of CMake. Many projects found that the
WriteCompilerDetectionHeader
was best used by manually generating its header locally with a recent version of CMake and then bundling it with the project source so that it could be used with older CMake versions.
For reasons including the above, CMake 3.20 and above prefer to not
provide the WriteCompilerDetectionHeader
module. This policy
provides compatibility for projects that have not been ported away from
it. Projects using the module should be updated to stop using it.
Alternatives include:
Bundle a copy of the generated header in the project's source.
Use a third-party alternative, such as the CC0-licensed Hedley.
Drop support for compilers too old to provide the features natively.
The OLD
behavior of this policy is for inclusion of the deprecated
WriteCompilerDetectionHeader
module to work. The NEW
behavior is for inclusion of the module to fail as if it does not exist.
This policy was introduced in CMake version 3.20. CMake version 3.23.5
warns when the policy is not set and uses OLD
behavior. Use the
cmake_policy()
command to set it to OLD
or NEW
explicitly.
Note
The OLD
behavior of a policy is
deprecated by definition
and may be removed in a future version of CMake.