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/OFF 值。cmake-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> 之後的參數。如果找到額外的參數,則會發出作者警告。

參見