Spec-Zone.ru › CMake 3.6

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 major.minor[.patch[.tweak]])

Укажите, что текущий код CMake написан для указанной версии CMake. Все политики, введённые в указанной или более ранней версии, будут настроены на использование NEW поведения. Все политики, введённые после указанной версии, будут сброшены (если переменная CMAKE_POLICY_DEFAULT_CMP<NNNN> не задаёт значение по умолчанию). Это фактически запрашивает предпочтительное поведение, начиная с определённой версии CMake, и сообщает более новым версиям CMake о своих новых политиках. Указанная версия политики должна быть не ниже 2.4, иначе команда сообщит об ошибке.

Обратите внимание, что команда 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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.6/command/cmake_policy.html

Spec-Zone.ru

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