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 的根物件始終提供兩個欄位:formatVersionMajor
和 formatVersionMinor
,它們始終是描述產生器輸出格式的整數。對輸出格式的回溯相容變更(例如,新增先前不存在的新欄位)會導致次要版本遞增,而回溯不相容變更(例如,刪除欄位或變更其含義)會導致主要版本遞增,並且次要版本重設為 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
不符的版本,其中major
和minor
是整數),則會忽略它。
- 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 將把這些檔案從暫存目錄複製回頂層建置目錄,並可能產生總和檢查碼檔案。