Spec-Zone.ru › CMake 3.10

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

Примечание

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

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

Spec-Zone.ru

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