Spec-Zone.ru › CMake 3.18

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

Spec-Zone.ru

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