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