|
|
|
CMP0120
|
|
|
|
-------
|
|
|
|
|
|
|
|
.. versionadded:: 3.20
|
|
|
|
|
|
|
|
The :module:`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 :manual:`cmake-compile-features(7)`. However:
|
|
|
|
|
|
|
|
* Those granular features have been superseded by meta-features for
|
|
|
|
:ref:`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 :module:`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 :module:`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
|
|
|
|
:module:`WriteCompilerDetectionHeader` module to work. The ``NEW``
|
|
|
|
behavior is for inclusion of the module to fail as if it does not exist.
|
|
|
|
|
|
|
|
.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.20
|
|
|
|
.. |WARNS_OR_DOES_NOT_WARN| replace:: warns
|
|
|
|
.. include:: STANDARD_ADVICE.txt
|
|
|
|
|
|
|
|
.. include:: DEPRECATED.txt
|
|
|
|
|
|
|
|
.. _`Hedley`: https://nemequ.github.io/hedley/
|