Spec-Zone.ru › CMake 3.16

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> и сохранению поведения CMake до версии 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.16/command/cmake_policy.html

Spec-Zone.ru

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