CMP0077¶
於 3.13 版本新增。
option()
會尊重一般變數。
option()
命令通常用於建立快取條目,以允許使用者設定選項。然而,在某些情況下,專案可能會在呼叫 option()
命令之前,定義與選項同名的普通(非快取)變數。例如,將另一個專案作為子目錄嵌入的專案,可能希望硬式編碼子專案的選項,以使其按照所需的方式建置。
由於歷史原因,在 CMake 3.12 及更早版本中,當以下情況發生時,option()
命令會移除同名的普通(非快取)變數:
指定的名稱的快取條目完全不存在,或者
指定的名稱的快取條目存在,但尚未給定類型(例如,透過命令列上的
-D<name>=ON
)。
在這兩種情況下(通常是在新建置樹中的首次執行時),option()
命令會將快取條目類型設定為 BOOL
,並移除任何同名的普通(非快取)變數。在剩餘的情況下,即指定名稱的快取條目已存在並具有類型(通常是在建置樹中的後續執行時),option()
命令不會進行任何變更,並且任何同名的普通變數將保持設定。
在 CMake 3.13 及更高版本中,當給定名稱的普通變數已存在時,option()
命令傾向於不執行任何動作。它不會建立或更新快取條目,也不會移除普通變數。新的行為在建置樹中的首次執行和後續執行之間保持一致。此原則為尚未更新以預期新行為的專案提供相容性。
當 option()
命令看到給定名稱的普通變數時
此原則的
OLD
行為是即使存在同名的普通變數也會繼續執行。如果快取條目尚未存在且沒有類型,則會建立和/或給定類型,並移除普通變數。此原則的
NEW
行為是當存在同名的普通變數時不執行任何動作。不會移除普通變數。不會建立或更新快取條目,並且如果快取條目存在,則會忽略它。
請參閱 CMP0126
,了解關於 set(CACHE)
命令的類似原則,但請注意,這兩個原則之間的 NEW
行為存在一些差異。
此原則是在 CMake 版本 3.13 中引入的。可以透過 cmake_policy()
或 cmake_minimum_required()
來設定。如果未設定,CMake 會發出警告,並使用 OLD
行為。
使用 CMAKE_POLICY_DEFAULT_CMP0077
變數來設定子目錄中協力廠商專案的原則,而無需修改它。
注意
原則的 OLD
行為依定義已棄用
,並可能在未來版本的 CMake 中移除。