Spec-Zone.ru › CMake 3.20

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

Spec-Zone.ru

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