Spec-Zone.ru › CMake 3.18

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API