CMP0054

警告

該方針的 OLD 行為已在 CMake 版本 4.0 中移除。該方針必須透過呼叫 cmake_minimum_required()cmake_policy() 設定為 NEW

在 3.1 版被加入.

Only interpret if() arguments as variables or keywords when unquoted.

CMake 3.1 and above no longer implicitly dereference variables or interpret keywords in an if() command argument when it is a 帶引號的引數 or a 方括號引數.

The OLD behavior for this policy is to dereference variables and interpret keywords even if they are quoted or bracketed. The NEW behavior is to not dereference variables or interpret keywords that have been quoted or bracketed.

Given the following partial example:

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()

After explicit expansion of variables this gives:

if("E" STREQUAL "")

With the policy set to OLD implicit expansion reduces this semantically to:

if("" STREQUAL "")

With the policy set to NEW the quoted arguments will not be further dereferenced:

if("E" STREQUAL "")

This policy was introduced in CMake version 3.1. Prior to removal in CMake version 4.0, it could be set by cmake_policy() or cmake_minimum_required(). If it was not set, CMake warned, and used OLD behavior.