| 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. |
| |
| This policy was introduced in CMake version 3.20. CMake version |release| |
| warns when the policy is not set and uses ``OLD`` behavior. Use the |
| :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly. |
| |
| .. include:: DEPRECATED.txt |
| |
| .. _`Hedley`: https://nemequ.github.io/hedley/ |