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