Spec-Zone.ru › CMake 3.23

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.23.3 не предупреждает, когда политика не установлена, а просто использует поведение OLD.

Примечание

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

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

Spec-Zone.ru

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