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.23.3 выводит предупреждение, если политика не установлена, и использует OLD поведение. Используйте команду cmake_policy() для явного её установки на OLD или NEW.
Примечание
Поведение политики OLD deprecated by definition и может быть удалено в будущей версии CMake.
© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.23/policy/CMP0054.html