set

將一般、快取或環境變數設定為給定的值。請參閱 cmake-language(7) 變數 文件,以了解一般變數和快取條目的範圍和交互作用。

此命令指定 <value>... 佔位符的簽名,預期會有零或多個參數。多個參數將會以 分號分隔列表 的形式連接,以形成要設定的實際變數值。

設定一般變數

set(<variable> <value>... [PARENT_SCOPE])

在目前函式或目錄範圍中設定或取消設定 <variable>

  • 如果給定至少一個 <value>...,則將變數設定為該值。

  • 如果未給定值,則取消設定該變數。這等效於 unset(<variable>)

如果給定 PARENT_SCOPE 選項,則該變數將在目前範圍的上層範圍中設定。每個新的目錄或 function() 命令都會建立新的範圍。也可以使用 block() 命令建立範圍。set(PARENT_SCOPE) 會將變數的值設定到上層目錄、呼叫函式或包含範圍(以適用於手邊情況者為準)。變數值先前的狀態在目前範圍中保持不變(例如,如果之前未定義,則仍為未定義,如果之前有值,則仍為該值)。

block(PROPAGATE)return(PROPAGATE) 命令可用作更新上層範圍的替代方法,取代 set(PARENT_SCOPE)unset(PARENT_SCOPE) 命令。

注意

在評估 變數參考(形式為 ${VAR})時,CMake 會先搜尋具有該名稱的一般變數。如果不存在此類一般變數,CMake 接著會搜尋具有該名稱的快取條目。因此,取消設定一般變數可能會暴露先前隱藏的快取變數。若要強制形式為 ${VAR} 的變數參考傳回空字串,請使用 set(<variable> ""),這會清除一般變數但保持其定義。

設定快取條目

set(<variable> <value>... CACHE <type> <docstring> [FORCE])

設定給定的快取 <variable>(快取條目)。由於快取條目旨在提供使用者可設定的值,因此預設不會覆寫現有的快取條目。使用 FORCE 選項覆寫現有的條目。

<type> 必須指定為下列其中一種

BOOL

布林值 ON/OFFcmake-gui(1) 提供核取方塊。

FILEPATH

磁碟上檔案的路徑。cmake-gui(1) 提供檔案對話方塊。

PATH

磁碟上目錄的路徑。cmake-gui(1) 提供檔案對話方塊。

STRING

一行文字。cmake-gui(1) 提供文字欄位,或如果設定 STRINGS 快取條目屬性,則提供下拉式選取項目。

INTERNAL

一行文字。cmake-gui(1) 不會顯示內部條目。它們可用於在多次執行之間持久儲存變數。使用此類型表示 FORCE

<docstring> 必須指定為一行文字,為 cmake-gui(1) 使用者提供選項的快速摘要。

如果在呼叫之前快取條目不存在,或者給定 FORCE 選項,則快取條目將設定為給定的值。

注意

如果已經存在同名的普通變數,則無法直接存取快取變數的內容(請參閱 變數評估規則)。如果原則 CMP0126 設定為 OLD,則會移除目前範圍中的任何一般變數繫結。

快取條目有可能在呼叫之前存在,但如果使用者在 cmake(1) 命令列上透過 -D<var>=<value> 選項建立該條目但未指定類型,則快取條目可能沒有設定類型。在此情況下,set 命令會新增類型。此外,如果 <type>PATHFILEPATH,且命令列上提供的 <value> 是相對路徑,則 set 命令會將該路徑視為相對於目前工作目錄,並將其轉換為絕對路徑。

設定環境變數

set(ENV{<variable>} [<value>])

環境變數 設定為給定的值。後續呼叫 $ENV{<variable>} 將傳回這個新值。

此命令僅影響目前的 CMake 程序,不會影響呼叫 CMake 的程序,也不會影響廣泛的系統環境,或後續建置或測試程序的環境。

如果在 ENV{<variable>} 之後未給定引數,或者 <value> 是空字串,則此命令將清除環境變數的任何現有值。

<value> 之後的引數會被忽略。如果找到多餘的引數,則會發出作者警告。

另請參閱