cmake_policy
Управление настройками политики CMake. См. руководство cmake-policies(7) для определенных политик.
По мере развития CMake иногда необходимо изменять существующее поведение, чтобы исправить ошибки или улучшить реализацию существующих функций. Механизм политик CMake предназначен для помощи в сохранении работоспособности существующих проектов при внедрении изменений поведения в новые версии CMake. Каждая новая политика (изменение поведения) получает идентификатор в формате CMP<NNNN>, где <NNNN> — целочисленный индекс. Документация, связанная с каждой политикой, описывает OLD и NEW поведение и причину внедрения политики. Проекты могут устанавливать каждую политику для выбора желаемого поведения. Когда CMake необходимо узнать, какое поведение использовать, он проверяет заданное проектом значение. Если значение не доступно, предполагается OLD поведение, и генерируется предупреждение с просьбой установить политику.
Установка политик по версии CMake
Команда cmake_policy используется для установки политик в OLD или NEW поведение. Хотя установка политик по отдельности поддерживается, мы рекомендуем устанавливать политики на основе версий CMake:
cmake_policy(VERSION <min>[...<max>])
<min> и необязательные <max> — это версии CMake в формате major.minor[.patch[.tweak]], а ... — это буквальное значение. Версия <min> должна быть не менее 2.4 и не более текущей версии CMake. Версия <max>, если указана, должна быть не менее версии <min>, но может превышать текущую версию CMake. Если текущая версия CMake старше 3.12, дополнительные ... точки будут интерпретироваться как разделители компонентов версии, в результате чего часть ...<max> будет проигнорирована, сохраняя поведение политик до версии 3.12, основанное на <min>.
Это указывает, что текущий код CMake написан для заданного диапазона версий CMake. Все политики, известные текущей версии CMake и введенные в версии <min> (или <max>, если указано) или ранее, будут установлены для использования NEW поведения. Все политики, введенные в более поздних версиях, будут сброшены (если переменная CMAKE_POLICY_DEFAULT_CMP<NNNN> не установит значение по умолчанию). Это фактически запрашивает поведение, предпочтительное по состоянию на определённую версию CMake, и сообщает более новым версиям CMake о предупреждениях относительно их новых политик.
Обратите внимание, что команда cmake_minimum_required(VERSION) неявно также вызывает cmake_policy(VERSION).
Явное задание политик
cmake_policy(SET CMP<NNNN> NEW) cmake_policy(SET CMP<NNNN> OLD)
Укажите CMake использовать OLD или NEW поведение для заданной политики. Проекты, зависящие от старого поведения заданной политики, могут предотвратить предупреждение о политике, установив состояние политики в OLD. В качестве альтернативы можно исправить проект для работы с новым поведением и установить состояние политики в NEW.
Примечание
OLD поведение политики — deprecated by definition и может быть удалено в будущей версии CMake.
Проверка настроек политик
cmake_policy(GET CMP<NNNN> <variable>)
Проверьте, установлено ли заданная политика в OLD или NEW поведение. Выходное значение <variable> будет OLD или NEW если политика установлена, и пустое в противном случае.
Стек политик CMake
CMake хранит настройки политик в стеке, поэтому изменения, внесённые командой cmake_policy, влияют только на верхнюю часть стека. Новая запись в стеке политик автоматически управляется для каждого подкаталога, чтобы защитить его родительские и братские каталоги. CMake также управляет новой записью для скриптов, загруженных командами include() и find_package(), за исключением случаев вызова с опцией NO_POLICY_SCOPE (см. также политику CMP0011). Команда cmake_policy предоставляет интерфейс для управления пользовательскими записями в стеке политик:
cmake_policy(PUSH) cmake_policy(POP)
Каждый PUSH должен иметь соответствующий POP для удаления любых изменений. Это полезно для внесения временных изменений в настройки политик. Вызовы команд cmake_minimum_required(VERSION), cmake_policy(VERSION), или cmake_policy(SET) влияют только на текущую верхнюю часть стека политик.
Команды, созданные командами function() и macro(), записывают настройки политик при их создании и используют предварительно записанные политики при их вызове. Если реализация функции или макроса устанавливает политики, изменения автоматически распространяются вверх через вызывающие стороны до достижения ближайшей вложенной записи стека политик.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.14/command/cmake_policy.html