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