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