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.29/policy/CMP0125.html