Spec-Zone.ru › CMake 3.27

CMP0054

Новое в версии 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 3.27.9 выдает предупреждение, если политика не установлена, и использует поведение OLD. Используйте команду cmake_policy() для явного её установки в OLD или NEW.

Примечание

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

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

Spec-Zone.ru

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