Spec-Zone.ru › CMake 3.15

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

Spec-Zone.ru

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