Spec-Zone.ru › CMake 3.22

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

Примечание

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

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

Spec-Zone.ru

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