Spec-Zone.ru › CMake 3.30

CMP0125

Новое в версии 3.21.

Команды find_file(), find_path(), find_library() и find_program() кэшируют свой результат в переменной, указанной в первом аргументе. До CMake 3.21, если переменная кэша с таким именем уже существовала до вызова, но переменная кэша не имела типа, любая переменная, не являющаяся переменной кэша, с тем же именем, отбрасывалась, а переменная кэша всегда использовалась (см. также CMP0126 для другого, но схожего поведения). Это противоречит соглашению, что переменная, не являющаяся переменной кэша, должна иметь приоритет над переменной кэша с тем же именем. Такая ситуация может возникнуть, если пользователь задаёт переменную кэша в командной строке без указания типа, например cmake -DMYVAR=blah ... вместо cmake -DMYVAR:FILEPATH=blah.

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

Когда политика CMP0125 установлена в OLD или снята, поведение соответствует описанному выше. Когда она установлена в NEW, поведение следующее:

  • Если переменная, не являющаяся переменной кэша, с указанным именем существует, когда вызывается команда find_...(), её значение будет использоваться независимо от того, существует ли переменная кэша с тем же именем или нет. Переменная кэша не будет создана в этом случае, если такая переменная кэша не существовала ранее. Если переменная кэша с указанным именем уже существовала, кэш будет обновлён для соответствия переменной, не являющейся переменной кэша.
  • Различные команды find...() всегда предоставят абсолютный путь в переменной результата, за исключением случаев, когда относительный путь, предоставленный переменной кэша или переменной, не являющейся переменной кэша, не может быть разрешён к существующему пути.

Эта политика была введена в CMake версии 3.21. Она может быть установлена с помощью cmake_policy() или cmake_minimum_required(). Если она не установлена, CMake не выводит предупреждение и использует поведение OLD.

Примечание

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

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

Spec-Zone.ru

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