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.22.6 предупреждает, когда политика не установлена и использует 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.22/policy/CMP0120.html