Spec-Zone.ru › CMake 3.31

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_policy() или cmake_minimum_required(). Если она не установлена, CMake выводит предупреждение и использует поведение OLD.

Примечание

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

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

Spec-Zone.ru

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