Spec-Zone.ru › CMake 3.14

CMP0077

option() учитывает обычные переменные.

Команда option() обычно используется для создания записи кэша, чтобы пользователи могли установить параметр. Однако есть случаи, когда проект может определить обычную (не кэшированную) переменную с таким же именем, как параметр, до вызова команды option(). Например, проект, который включает другой проект в качестве подкаталога, может захотеть жестко запрограммировать параметры подпроекта, чтобы скомпилировать его нужным образом.

По историческим причинам в CMake 3.12 и ниже команда option() удаляет обычную (не кэшированную) переменную с таким же именем, когда:

  • запись кэша с указанным именем вообще не существует, или
  • запись кэша с указанным именем существует, но ей не задан тип (например, с помощью -D<name>=ON в командной строке).

В обоих этих случаях (обычно при первом запуске в новой дереве сборки) команда option() задает типу записи кэша значение BOOL и удаляет любую обычную (не кэшированную) переменную с таким же именем. В оставшемся случае, когда запись кэша с указанным именем уже существует и имеет тип (обычно при последующих запусках в дереве сборки), команда option() ничего не меняет, и любая обычная переменная с тем же именем остается установленной.

В CMake 3.13 и выше команда option() предпочитает ничего не делать, когда обычная переменная с заданным именем уже существует. Она не создает и не обновляет запись кэша и не удаляет обычную переменную. Новое поведение согласованно между первым и последующими запусками в дереве сборки. Эта политика обеспечивает совместимость с проектами, которые не были обновлены, чтобы ожидать нового поведения.

Когда команда option() видит обычную переменную с заданным именем:

  • Поведение OLD для этой политики заключается в продолжении работы даже при наличии обычной переменной с тем же именем. Если запись кэша еще не существует и не имеет типа, она создается и/или получает тип, а обычная переменная удаляется.
  • Поведение NEW для этой политики заключается в том, чтобы ничего не делать, когда существует обычная переменная с тем же именем. Обычная переменная не удаляется. Запись кэша не создается и не обновляется, и игнорируется, если она существует.

Эта политика была введена в версии CMake 3.13. Версия CMake 3.14.7 выдает предупреждение, когда политика не установлена, и использует поведение OLD. Используйте команду cmake_policy(), чтобы явно установить ее в OLD или NEW.

Примечание

Поведение OLD политики — deprecated by definition и может быть удалено в будущих версиях CMake.

© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.14/policy/CMP0077.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API