Spec-Zone.ru › CMake 3.26

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

Примечание

Поведение 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/CMP0054.html

Spec-Zone.ru

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