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