CPack 外部產生器

版本 3.13 新增。

CPack 提供了許多產生器,用於為各種平台和封裝系統建立套件。其目的是讓 CMake/CPack 成為建置和封裝軟體專案的完整端對端解決方案。然而,由於技術限制或需要使用特定工具的政策,可能不總是能夠使用 CPack 來完成整個封裝流程。因此,CPack 提供了「External」產生器,允許外部封裝軟體利用 CPack 提供的一些功能,例如組件安裝和相依性圖。

與外部封裝工具整合

CPack 外部產生器會產生一個 .json 檔案,其中包含 CPack 內部元數據,為外部軟體提供關於如何封裝軟體的資訊。外部封裝軟體可以自行調用 CPack,使用產生的元數據,並根據需要安裝和封裝檔案。

或者,CPack 可以透過 CPACK_EXTERNAL_PACKAGE_SCRIPT 中的可選自訂 CMake 腳本來調用外部封裝軟體。

當透過 CPACK_EXTERNAL_ENABLE_STAGING 變數啟用時,產生器也可以選擇性地處理安裝檔案的暫存。

JSON 格式

JSON 元數據檔案包含 CPack 組件和組件群組的列表、傳遞給 cpack_add_component()cpack_add_component_group() 的各種選項、組件和組件群組之間的相依性,以及傳遞給 CPack 的各種其他選項。

JSON 的根物件始終提供兩個欄位:formatVersionMajorformatVersionMinor,它們始終是描述產生器輸出格式的整數。對輸出格式的回溯相容變更(例如,新增先前不存在的新欄位)會導致次要版本遞增,而回溯不相容變更(例如,刪除欄位或變更其含義)會導致主要版本遞增,並且次要版本重設為 0。格式版本始終採用 major.minor 格式。換句話說,它始終正好有兩個部分,以句點分隔。

您可以使用 CPACK_EXTERNAL_REQUESTED_VERSIONS 請求一個或多個特定的輸出格式版本,如下所述。輸出格式的主要版本將與請求的主要版本完全匹配,而次要版本將大於或等於請求的次要版本。如果沒有使用 CPACK_EXTERNAL_REQUESTED_VERSIONS 請求版本,則預設使用最新的已知主要版本。目前,唯一支援的格式是 1.0,如下所述。

版本 1.0

除了標準格式欄位外,格式版本 1.0 在根目錄中提供以下欄位

組件

components 欄位是一個物件,其中組件名稱作為鍵,描述組件的物件作為值。組件物件具有以下欄位

名稱

組件的名稱。這始終與 components 物件中的鍵相同。

顯示名稱

傳遞給 cpack_add_component()DISPLAY_NAME 欄位的值。

描述

傳遞給 cpack_add_component()DESCRIPTION 欄位的值。

是否隱藏

如果將 HIDDEN 傳遞給 cpack_add_component(),則為 True,否則為 False。

是否為必要

如果將 REQUIRED 傳遞給 cpack_add_component(),則為 True,否則為 False。

預設是否停用

如果將 DISABLED 傳遞給 cpack_add_component(),則為 True,否則為 False。

群組

僅當將 GROUP 傳遞給 cpack_add_component() 時才存在。如果是這樣,此欄位是一個字串值,包含組件的群組。

相依性

組件相依的組件陣列。這包含傳遞給 cpack_add_component()DEPENDS 引數中的值。如果未傳遞 DEPENDS 引數,則這是一個空列表。

安裝類型

組件所屬的安裝類型陣列。這包含傳遞給 cpack_add_component()INSTALL_TYPES 引數中的值。如果未傳遞 INSTALL_TYPES 引數,則這是一個空列表。

是否已下載

如果將 DOWNLOADED 傳遞給 cpack_add_component(),則為 True,否則為 False。

封存檔案

使用 ARCHIVE_FILE 引數傳遞給 cpack_add_component() 的封存檔案名稱。如果未傳遞 ARCHIVE_FILE 引數,則這是一個空字串。

組件群組

componentGroups 欄位是一個物件,其中組件群組名稱作為鍵,描述組件群組的物件作為值。組件群組物件具有以下欄位

名稱

組件群組的名稱。這始終與 componentGroups 物件中的鍵相同。

顯示名稱

傳遞給 cpack_add_component_group()DISPLAY_NAME 欄位的值。

描述

傳遞給 cpack_add_component_group()DESCRIPTION 欄位的值。

父群組

僅當將 PARENT_GROUP 傳遞給 cpack_add_component_group() 時才存在。如果是這樣,此欄位是一個字串值,包含組件群組的父群組。

預設是否展開

如果將 EXPANDED 傳遞給 cpack_add_component_group(),則為 True,否則為 False。

是否粗體

如果將 BOLD_TITLE 傳遞給 cpack_add_component_group(),則為 True,否則為 False。

組件

作為群組直接成員的組件名稱陣列(將此群組作為其 GROUP 的組件)。不包含子群組的組件。

子群組

作為群組子群組的組件群組名稱陣列(將此群組作為其 PARENT_GROUP 的群組)。

安裝類型

installationTypes 欄位是一個物件,其中安裝類型名稱作為鍵,描述安裝類型的物件作為值。安裝類型物件具有以下欄位

名稱

安裝類型的名稱。這始終與 installationTypes 物件中的鍵相同。

顯示名稱

傳遞給 cpack_add_install_type()DISPLAY_NAME 欄位的值。

索引

列表中安裝類型的整數索引。

專案

projects 欄位是一個物件陣列,描述組成 CPack 專案的 CMake 專案。此欄位中的值衍生自 CPACK_INSTALL_CMAKE_PROJECTS。在大多數情況下,這只會是一個單一專案。專案物件具有以下欄位

專案名稱

傳遞給 CPACK_INSTALL_CMAKE_PROJECTS 的專案名稱。

組件

組成專案的組件或組件集的名稱。

目錄

CMake 專案的建置目錄。這是包含 cmake_install.cmake 腳本的目錄。

子目錄

將專案安裝到 CPack 套件內的子目錄。

套件名稱

CPACK_PACKAGE_NAME 中給定的套件名稱。僅當設定此選項時才存在。

套件版本

CPACK_PACKAGE_VERSION 中給定的套件版本。僅當設定此選項時才存在。

套件描述檔

CPACK_PACKAGE_DESCRIPTION_FILE 中給定的套件描述檔。僅當設定此選項時才存在。

套件描述摘要

CPACK_PACKAGE_DESCRIPTION_SUMMARY 中給定的套件描述摘要。僅當設定此選項時才存在。

建置配置

使用 cpack -C 選項提供給 CPack 的建置配置。僅當設定此選項時才存在。

預設目錄權限

CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS 中給定的預設目錄權限。僅當設定此選項時才存在。

設定 Destdir

如果 CPACK_SET_DESTDIR 為 true,則為 True,否則為 False。

封裝安裝前綴

CPACK_PACKAGING_INSTALL_PREFIX 中給定的安裝前綴。僅當 CPACK_SET_DESTDIR 為 true 時才存在。

移除檔案

如果 CPACK_STRIP_FILES 為 true,則為 True,否則為 False。

警告絕對安裝目的地

如果 CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION 為 true,則為 True,否則為 False。

錯誤絕對安裝目的地

如果 CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION 為 true,則為 True,否則為 False。

CPack 外部產生器特有的變數

CPACK_EXTERNAL_REQUESTED_VERSIONS

此變數用於請求 CPack 外部產生器的特定版本。它是一個 major.minor 值列表,以分號分隔。

如果此變數設定為非空值,CPack 外部產生器將迭代列表中的每個項目,以搜尋它知道如何產生的版本。請求的版本應由用戶端軟體按偏好程度降序排列,因為將產生列表中第一個匹配的版本。

如果產生器具有版本化的產生器,其主要版本與請求的主要版本完全匹配,且其次要版本大於或等於請求的次要版本,則產生器知道如何產生該版本。例如,如果 CPACK_EXTERNAL_REQUESTED_VERSIONS 包含 1.0,且 CPack 外部產生器知道如何產生 1.1,則它將產生 1.1。如果產生器不知道如何產生列表中的版本,它將跳過該版本並查看下一個版本。如果它不知道如何產生任何請求的版本,則會拋出錯誤。

如果未設定此變數,或為空,CPack 外部產生器將產生它知道如何產生的最高主要版本和次要版本。

如果在 CPACK_EXTERNAL_REQUESTED_VERSIONS 中遇到無效版本(與 major.minor 不符的版本,其中 majorminor 是整數),則會忽略它。

CPACK_EXTERNAL_ENABLE_STAGING

此變數可以設定為 true,以啟用選擇性安裝到臨時暫存區,然後可以由外部封裝工具拾取和封裝。CPack 用於目前封裝任務的頂層目錄包含在 CPACK_TOPLEVEL_DIRECTORY 中。它在每次執行時在啟動封裝之前自動清除,並且可以用於外部封裝工具所需的自訂臨時檔案。它還包含暫存區 CPACK_TEMPORARY_DIRECTORY,當啟用暫存時,CPack 會在其中執行安裝。

CPACK_EXTERNAL_PACKAGE_SCRIPT

此變數可以選擇性地指定要作為 CPack 調用一部分執行的 CMake 腳本檔案的完整路徑。它在(可選)暫存發生後調用,並且可以執行外部封裝工具。腳本可以存取 CPack 配置檔案定義的變數。

CPACK_EXTERNAL_BUILT_PACKAGES

版本 3.19 新增。

CPACK_EXTERNAL_PACKAGE_SCRIPT 腳本可以將此列表變數設定為產生的套件檔案的完整路徑。如果設定了 CPACK_PACKAGE_CHECKSUM,CPack 將把這些檔案從暫存目錄複製回頂層建置目錄,並可能產生總和檢查碼檔案。