CMAKE_INSTALL_MODE

於版本 3.22 新增。

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

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

安裝的預設行為是將來源目錄中的來源檔案複製到目標目錄。然而,這個環境變數允許使用者覆寫此行為,使 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 可能會導致意想不到的結果。從非符號連結模式移動到符號連結模式將會捨棄目的地上的任何先前檔案,但反之則不然。一旦目的地存在符號連結,即使您切換到非符號連結模式,符號連結仍將繼續存在於目的地,並且不會被實際檔案取代。