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.20/command/cmake_policy.html