CMAKE_INSTALL_MODE

版本 3.22 新增。

這是 CMake 的 環境變數。其初始值取自呼叫程序環境。

CMAKE_INSTALL_MODE 環境變數允許使用者在 file(INSTALL)install() 的替代模式下操作 CMake。

安裝的預設行為是將來源檔案從來源目錄複製到目標目錄。然而,此環境變數允許使用者覆寫此行為,使 CMake 改為建立符號連結。

使用情境

安裝符號連結而非複製檔案,在以下方面有所幫助:

  • 節省儲存空間,因為檔案不必在磁碟上重複。

  • 符號連結來源的變更會在安裝目標中顯示,而無需重新執行安裝步驟。

  • 透過安裝目標中的連結進行編輯,將會修改連結的來源。這在處理 CMake 專案階層時可能很有用,例如使用 ExternalProject,並希望跨專案保持一致的來源導覽和重構。

允許的值

以下是 CMAKE_INSTALL_MODE 允許的值:

COPY、空白或未設定

在其目標位置複製檔案。這是預設行為。

ABS_SYMLINK

在目標位置建立指向來源檔案的絕對符號連結。如果無法建立連結,則停止並顯示錯誤。

ABS_SYMLINK_OR_COPY

類似於 ABS_SYMLINK,但如果無法建立符號連結,則靜默地回退到複製。

REL_SYMLINK

在目標位置建立指向來源檔案的相對符號連結。如果無法建立連結,則停止並顯示錯誤。

REL_SYMLINK_OR_COPY

類似於 REL_SYMLINK,但如果無法建立符號連結,則靜默地回退到複製。

SYMLINK

嘗試如同 REL_SYMLINK,如果參考的檔案無法使用相對路徑表示,則回退到 ABS_SYMLINK。如果無法建立連結,則停止並顯示錯誤。

SYMLINK_OR_COPY

類似於 SYMLINK,但如果無法建立符號連結,則靜默地回退到複製。

注意

符號連結由參考檔案路徑組成,而不是其自身的內容,因此有兩種方式來表達關係,即透過相對絕對路徑。

何時設定環境變數

為了使環境變數生效,必須在正確的建置階段設定它。

  • 如果專案直接呼叫 file(INSTALL),則必須在組態階段設定環境變數。

  • 為了應用於 install(),必須在安裝期間設定環境變數。如果使用 installpackage 建置目標,則可能在建置期間設定,或者在調用安裝或從命令列執行 cpack 時,與建置分開設定。

  • 當使用 ExternalProject 時,可能需要在建置階段設定,因為外部專案自身的組態、建置和安裝步驟將在主專案的建置階段執行。

鑑於以上所述,建議在所有階段(組態、建置和安裝)一致地設定環境變數。

注意事項

請謹慎使用此環境變數。以下重點列出一些需要考慮的事項:

  • CMAKE_INSTALL_MODE 僅影響檔案,不影響目錄。

  • 符號連結並非在所有平台上都可用。

  • 此環境變數與 ExternalProject 的安裝步驟互動方式更為複雜。有關更多詳細資訊,請參閱該模組的文件。

  • 符號連結以持久的方式將目標位置與來源連結在一起。寫入兩者中的任何一個都會影響兩個檔案系統物件。這與正常的安裝行為相反,後者僅複製安裝執行時的檔案,來源和安裝目標之間沒有持久的關係。

  • 不支援將 CMAKE_INSTALL_MODEIOS_INSTALL_COMBINED 結合使用。

  • 從先前的執行中更改 CMAKE_INSTALL_MODE 可能會導致意外的結果。從非符號連結模式移動到符號連結模式將會捨棄目標位置的任何先前檔案,但反之則不然。一旦符號連結存在於目標位置,即使您切換到非符號連結模式,符號連結仍將繼續存在於目標位置,並且不會被實際檔案取代。