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