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