CMP0120
Новая в версии 3.20.
Модуль WriteCompilerDetectionHeader удален.
Версии CMake с 3.1 по 3.19 предоставляют этот модуль для генерации слоя совместимости C++ путём повторного использования информации из таблицы CMake по проверкам препроцессора для cmake-compile-features(7). Однако:
- Эти подробные возможности были заменены мета-возможностями для Требования к стандартам языка, таких как
cxx_std_11. Следовательно, добавление новых проверок подробных функций не будет производиться, и проектам придётся использовать другие методы для условного использования новых функций C++. - Модуль напрямую раскрывает некоторые детали реализации CMake для единиц трансляции C++.
- Подход модуля фактически предоставляет заголовочный файл с CMake, таким образом, привязывая версию заголовочного файла к версии CMake. Многие проекты обнаружили, что модуль
WriteCompilerDetectionHeaderлучше всего использовать, вручную сгенерировав его заголовочный файл локально с помощью недавней версии CMake, а затем объединив его с исходным кодом проекта, чтобы его можно было использовать с более старыми версиями CMake.
По причинам, включая вышеизложенное, CMake 3.20 и выше предпочитают не предоставлять модуль WriteCompilerDetectionHeader. Данная политика обеспечивает совместимость для проектов, которые не были переведены с этого модуля. Проекты, использующие данный модуль, должны быть обновлены, чтобы прекратить его использование. Альтернативы включают:
- Объединение копии сгенерированного заголовочного файла в исходный код проекта.
- Использование сторонней альтернативы, например, Hedley с лицензией CC0.
- Отказ от поддержки компиляторов, которые не предоставляют функции нативно.
Поведение OLD этой политики заключается в включении устаревшего модуля WriteCompilerDetectionHeader. Поведение NEW предназначено для отказа от включения модуля, как если бы он не существовал.
Эта политика была введена в версии CMake 3.20. Версия CMake 3.23.3 предупреждает, когда политика не установлена, и использует OLD поведение. Используйте команду cmake_policy(), чтобы явно установить её в OLD или NEW.
Примечание
Поведение OLD политики deprecated by definition и может быть удалено в будущих версиях CMake.
© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.23/policy/CMP0120.html