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