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