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 的未來版本中移除。