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> будет проигнорирована, сохранив поведение политик до версии 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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/command/cmake_policy.html