Spec-Zone.ru › CMake 3.26

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(), чтобы установить её явно в OLD или NEW. В отличие от многих политик, CMake версии 3.26.0-rc3 не предупреждает, когда политика не установлена, и просто использует поведение OLD.

Примечание

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

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

Spec-Zone.ru

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