Spec-Zone.ru › CMake 3.16

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

Spec-Zone.ru

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