Spec-Zone.ru › CMake 3.15

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.15.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.15/policy/CMP0054.html

Spec-Zone.ru

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