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>])
Новое в версии 3.12: Необязательная версия <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–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/command/cmake_policy.html