CMP0054¶
於版本 3.1 加入。
僅在未加引號時,將 if()
的參數解讀為變數或關鍵字。
當 if()
命令的參數為 加引號的參數 或 括號參數 時,CMake 3.1 及更高版本不再隱式地解引用變數或解讀關鍵字。
此策略的 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_policy()
或 cmake_minimum_required()
設定。如果未設定,CMake 會發出警告,並使用 OLD
行為。
注意
策略的 OLD
行為根據 定義已棄用
,並可能在未來的 CMake 版本中移除。