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. Эта политика обеспечивает совместимость для проектов, которые ещё не переведены с неё. Проекты, использующие модуль, должны быть обновлены, чтобы прекратить его использование. Альтернативы включают:
- Включить копию сгенерированного заголовочного файла в исходный код проекта.
- Использовать стороннюю альтернативу, такую как CC0-лицензированный Hedley.
- Отказаться от поддержки компиляторов, слишком старых для предоставления функций в виде нативного кода.
Поведение OLD этой политики — для включения устаревшего модуля WriteCompilerDetectionHeader, чтобы работало. Поведение NEW — для включения модуля, чтобы произошла ошибка, как будто он не существует.
Эта политика была введена в CMake версии 3.20. CMake версии 3.27.9 выводит предупреждение, когда политика не установлена и использует OLD поведение. Используйте команду cmake_policy() для явного установки её на OLD или NEW.
Примечание
Поведение OLD политики deprecated by definition и может быть удалено в будущей версии CMake.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.27/policy/CMP0120.html