Spec-Zone.ru › CMake 3.14

CMP0054

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

Примечание

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

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

Spec-Zone.ru

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