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(), за исключением случаев, когда вызывается с опцией %%%CODE_BLOCK_29%% (см. также политику 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.5/command/cmake_policy.html