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