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