Spec-Zone.ru › CMake 3.24

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

Spec-Zone.ru

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