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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.13/command/cmake_policy.html