Spec-Zone.ru › CMake 3.28

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.28.6 выводит предупреждение, когда политика не установлена и использует поведение 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.28/policy/CMP0054.html

Spec-Zone.ru

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