Spec-Zone.ru › CMake

CMP0054

Предупреждение

Поведение политики OLD было удалено в версии CMake 4.0. Для этой политики необходимо установить значение NEW с помощью вызова cmake_minimum_required() или cmake_policy().

Добавлено в версии 3.1.

Рассматривать аргументы if() как переменные или ключевые слова следует только в том случае, если они не заключены в кавычки.

Начиная с CMake 3.1, переменные в аргументе команды if() больше не разыменовываются неявно, а ключевые слова не интерпретируются, если аргумент является аргументом в кавычках или аргументом в скобках.

Поведение OLD для этой политики заключается в разыменовании переменных и интерпретации ключевых слов, даже если они заключены в кавычки или скобки. Поведение NEW заключается в том, что переменные не разыменовываются, а ключевые слова не интерпретируются, если они заключены в кавычки или скобки.

Рассмотрим следующий фрагмент примера:

set(A E)
set(E "")

if("${A}" STREQUAL "")
  message("Result is TRUE before CMake 3.1 or when CMP0054 is OLD")
else()
  message("Result is FALSE in CMake 3.1 and above if CMP0054 is NEW")
endif()

После явного раскрытия переменных получается:

if("E" STREQUAL "")

Если для политики установлено значение OLD, неявное раскрытие семантически сводит это к следующему:

if("" STREQUAL "")

Если для политики установлено значение NEW, аргументы в кавычках не будут разыменовываться повторно:

if("E" STREQUAL "")

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

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0054.html

Spec-Zone.ru

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