在CMake中,若要在另一個CMake文件中強制啟用由option()
定義的變量,可使用set(... FORCE)
覆蓋緩存變量。具體步驟如下:
-
使用
set
命令強制覆蓋緩存:
在需要強制啟用選項的CMake文件中,使用set
命令并指定CACHE
和FORCE
參數。例如:set(MY_OPTION ON CACHE BOOL "Description" FORCE)
這會強制將
MY_OPTION
設為ON
,覆蓋之前的任何值。 -
確保執行順序:
將該set
命令放置在包含原始option()
定義之前(如add_subdirectory
調用前),以確保覆蓋生效。例如:# 父目錄的CMakeLists.txt cmake_minimum_required(VERSION 3.10) project(MyProject)# 強制啟用選項 set(ENABLE_FEATURE ON CACHE BOOL "Force enable feature" FORCE)# 包含子目錄,其中包含option(ENABLE_FEATURE ...) add_subdirectory(subdir)
原理說明:
option()
定義的變量本質上是緩存變量(CACHE
變量)。當首次定義option()
時,若緩存中不存在該變量,則創建并設置默認值;若已存在,則保留緩存值。- 使用
set(... FORCE)
會強制更新緩存中的值,無論之前是否存在或如何設置,從而確保變量被強制啟用。
注意事項:
- 確保在包含定義該
option
的子目錄前調用set
命令,或在項目頂層提前設置。 - 避免在多個地方重復使用
option()
定義同一變量,以免引發沖突。
通過上述方法,即可在任意CMake文件中強制啟用由option()
定義的變量。