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