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_policy() или cmake_minimum_required(). Если она не установлена, CMake выводит предупреждение и использует поведение OLD.
Примечание
Поведение OLD политики deprecated by definition и может быть удалено в будущих версиях CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.30/policy/CMP0120.html