CPack DEB 產生器

內建的 (二進制) CPack DEB 產生器 (僅限 Unix)

CPack Debian (DEB) 產生器專用變數

CPack DEB 產生器可用於使用 CPack 建立 DEB 套件。CPack DEB 產生器是一個 CPack 產生器,因此它使用 CPack 使用的 CPACK_XXX 變數。

CPack DEB 產生器應可在任何 Linux 主機上運作,但在建置系統上可使用 Debian 專用工具 dpkg-xxx 時,將產生更好的 deb 套件。

CPack DEB 產生器具有特定功能,這些功能由特定的 CPACK_DEBIAN_XXX 變數控制。

CPACK_DEBIAN_<COMPONENT>_XXXX 變數可用於取得組件特定值。但請注意,<COMPONENT> 指的是以大寫寫成的群組名稱。它可以是組件名稱或組件群組名稱。

以下是一些 CPack DEB 產生器 Wiki 資源,它們基於歷史原因而存在,且不再維護,但可能仍然有用

CPack DEB 產生器特定變數列表

CPACK_DEB_COMPONENT_INSTALL

為 CPackDEB 啟用組件封裝

必要:

預設值:

OFF

如果啟用 (ON),則會產生多個套件。預設情況下,會產生包含所有組件檔案的單一套件。

CPACK_DEBIAN_PACKAGE_NAME
CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME

設定套件控制欄位 (變數會自動轉換為小寫)。

必要:

預設值:

Added in version 3.5: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-source

CPACK_DEBIAN_FILE_NAME
CPACK_DEBIAN_<COMPONENT>_FILE_NAME

在版本 3.6 中新增。

套件檔案名稱。

必要:

預設值:

<CPACK_PACKAGE_FILE_NAME>[-<component>].deb

可以設定為

DEB-DEFAULT

告知 CPack 自動以 deb 格式產生套件檔案名稱

<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb

建議將此設定作為首選行為,但為了與 3.6 之前版本 CMake 中的 CPack DEB 產生器向後相容,這不是預設值。若不使用此設定,可能會發生重複的名稱。重複的檔案會被覆寫,且封裝者有責任以防止此類錯誤的方式設定變數。

<檔案名稱>[.deb]

使用給定的檔案名稱。

Changed in version 3.29: 如果檔案名稱未以 .deb.ipk 結尾,則會自動新增 .deb 後綴。先前需要後綴。

<檔案名稱>.ipk

在版本 3.10 中新增。

使用給定的檔案名稱。.ipk 後綴由 OPKG 封裝系統使用。

CPACK_DEBIAN_PACKAGE_EPOCH

在版本 3.10 中新增。

Debian 套件紀元

必要:

預設值:

選用數字,當變更版本控制架構或修正舊套件版本號碼中的錯誤時,應遞增此數字。

CPACK_DEBIAN_PACKAGE_VERSION

Debian 套件版本

必要:

預設值:

CPACK_PACKAGE_VERSION

此變數可能僅包含字母數字 (A-Za-z0-9) 和字元 . + - ~ (句點、加號、連字號、波浪號),且應以數字開頭。如果未設定 CPACK_DEBIAN_PACKAGE_RELEASE,則不允許使用連字號。

注意

為了與 CMake 3.9 及更低版本向後相容,當 CPACK_DEBIAN_PACKAGE_RELEASECPACK_DEBIAN_PACKAGE_EPOCH 變數都未設定時,對此變數內容的測試失敗並非嚴重錯誤。而是會報告作者警告。

CPACK_DEBIAN_PACKAGE_RELEASE

在版本 3.6 中新增。

Debian 套件發行版本 - Debian 修訂版本號碼。

必要:

預設值:

這是 DEB 套件本身的編號,即封裝的版本,而不是內容的版本 (請參閱 CPACK_DEBIAN_PACKAGE_VERSION)。如果先前的封裝有錯誤,和/或您想在此處放置精美的 Linux 發行版特定編號,則可以變更預設值。

CPACK_DEBIAN_PACKAGE_ARCHITECTURE
CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE

Debian 套件架構

必要:

預設值:

dpkg --print-architecture 的輸出 (如果找不到 dpkg,則為 i386)

Added in version 3.6: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE 變數。

CPACK_DEBIAN_PACKAGE_DEPENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS

設定此套件的 Debian 相依性。

必要:

預設值:

Added in version 3.3: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS 變數。

注意

如果為此組件設定了 CPACK_DEBIAN_PACKAGE_SHLIBDEPS 或更具體地說 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS,則探索到的相依性將附加到 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS,而不是 CPACK_DEBIAN_PACKAGE_DEPENDS。如果 CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS 是空字串,則只會為此組件設定自動探索到的相依性。

Changed in version 3.31: 變數始終展開為列表。之前,只有在與 CPACK_DEB_COMPONENT_INSTALLCPACK_DEBIAN_PACKAGE_SHLIBDEPSCPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS 協同使用時才會展開。這表示如果組件沒有探索到共用程式庫 (例如,僅由腳本組成的套件),您必須自行加入列表以取得有效的 Depends 欄位。

範例

set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
list(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS cmake)
CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS

在版本 3.6 中新增。

如果使用 CPACK_COMPONENT_<compName>_DEPENDS 變數列出組件間相依性,則設定這些相依性。

必要:

預設值:

CPACK_DEBIAN_PACKAGE_MAINTAINER

Debian 套件維護者

必要:

預設值:

CPACK_PACKAGE_CONTACT

CPACK_DEBIAN_PACKAGE_DESCRIPTION
CPACK_DEBIAN_<COMPONENT>_DESCRIPTION

Debian 套件描述

必要:

預設值:

如果在此之後未設定描述,則將使用 CPACK_PACKAGE_DESCRIPTION_SUMMARY (如果已設定)。否則,CPACK_PACKAGE_DESCRIPTION_SUMMARY 將新增為描述的第一行,如 Debian Policy Manual 中所定義。

Added in version 3.3: 每個組件的 CPACK_COMPONENT_<compName>_DESCRIPTION 變數。

Added in version 3.16: 每個組件的 CPACK_DEBIAN_<COMPONENT>_DESCRIPTION 變數。

Added in version 3.16: CPACK_PACKAGE_DESCRIPTION_FILE 變數。

CPACK_DEBIAN_PACKAGE_SECTION
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION

設定 Section 控制欄位,例如 admin、devel、doc 等。

必要:

預設值:

devel

Added in version 3.5: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections

CPACK_DEBIAN_ARCHIVE_TYPE

在版本 3.7 中新增。

自版本 3.14 起已棄用。

用於建立 Debian 套件的封存格式。

必要:

預設值:

gnutar

可能的值為:gnutar

注意

此變數先前預設為 paxr 值,但 dpkg 從未支援該 tar 格式。為了向後相容性,paxr 值將對應到 gnutar,並將發出棄用訊息。

CPACK_DEBIAN_COMPRESSION_TYPE

在版本 3.1 中新增。

用於建立 Debian 套件的壓縮。

必要:

預設值:

gzip

可能的值為

lzma

Lempel–Ziv–Markov 鏈演算法

xz

XZ Utils 壓縮

bzip2

bzip2 Burrows–Wheeler 演算法

gzip

GNU Gzip 壓縮

zstd

在版本 3.22 中新增。

Zstandard 壓縮

CPACK_DEBIAN_PACKAGE_PRIORITY
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY

設定 Priority 控制欄位,例如 required、important、standard、optional、extra

必要:

預設值:

optional

Added in version 3.5: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities

CPACK_DEBIAN_PACKAGE_HOMEPAGE

此套件的網站 URL,最好 (在適用情況下) 是可以從中取得原始碼,且可以找到任何其他上游文件或資訊的網站。

必要:

預設值:

CMAKE_PROJECT_HOMEPAGE_URL

Added in version 3.12: CMAKE_PROJECT_HOMEPAGE_URL 變數。

注意

此欄位的內容是一個簡單的 URL,沒有任何周圍字元,例如 <>。

CPACK_DEBIAN_PACKAGE_SHLIBDEPS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS

可以設定為 ON,以便使用 dpkg-shlibdeps 來產生更好的套件相依性列表。

必要:

預設值:

注意

如果您使用此功能,您可能需要將 CMAKE_INSTALL_RPATH 設定為適當的值,因為如果您不這樣做,dpkg-shlibdeps 可能無法找到您自己的共用程式庫。請參閱 https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling

注意

如果您使用此功能,您也可以將 CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS 設定為適當的值,以便取悅 dpkg-shlibdeps。但是,您應該僅對無法以其他方式解析的私有共用程式庫執行此操作。

Added in version 3.3: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS 變數。

Added in version 3.6: 正確處理 CMAKE_INSTALL_RPATH 中的 $ORIGIN

CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS

在版本 3.20 中新增。

可以設定為目錄列表,這些目錄將透過其 -l 選項提供給 dpkg-shlibdepsdpkg-shlibdeps 將搜尋這些目錄,以尋找私有共用程式庫相依性。

必要:

預設值:

注意

如果您使用 dpkg-shlibdeps,您應該優先將 CMAKE_INSTALL_RPATH 設定為適當的值。目前的選項實際上僅適用於私有共用程式庫相依性。

CPACK_DEBIAN_PACKAGE_DEBUG

在調用 cpack 時可以設定此項,以便在 CPack DEB 產生器執行期間追蹤偵錯資訊。

必要:

預設值:

CPACK_DEBIAN_PACKAGE_PREDEPENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS

設定 Debian 套件的 Pre-Depends 欄位。與 Depends 類似,但不同之處在於,它還強制 dpkg 完成指定套件的安裝,然後才開始安裝宣告預先相依性的套件。

必要:

預設值:

Added in version 3.4: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_ENHANCES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES

設定 Debian 套件的 Enhances 欄位。與 Suggests 類似,但方向相反:宣告套件可以增強另一個套件的功能。

必要:

預設值:

Added in version 3.4: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_BREAKS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS

設定 Debian 套件的 Breaks 欄位。當二進制套件 (P) 宣告它會破壞其他套件 (B) 時,dpkg 將不允許解壓縮宣告 Breaks 的套件 (P),除非先取消設定將被破壞的套件 (B)。只要套件 (P) 已設定,先前取消設定的套件 (B) 就無法再次重新設定。

必要:

預設值:

Added in version 3.4: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks

CPACK_DEBIAN_PACKAGE_CONFLICTS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS

設定 Debian 套件的 Conflicts 欄位。當一個二進制套件使用 Conflicts 欄位宣告與另一個套件衝突時,dpkg 將不允許它們同時在系統上解壓縮。

必要:

預設值:

Added in version 3.4: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts

注意

這是一個比 Breaks 更強烈的限制,它會阻止有問題的套件在破壞性套件處於 "Unpacked" 狀態時進行配置,但允許兩個套件同時處於 unpacked 狀態。

CPACK_DEBIAN_PACKAGE_PROVIDES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES

設定 Debian 套件的 Provides 欄位。虛擬套件是指在另一個套件的 Provides 控制欄位中出現的套件。

必要:

預設值:

版本 3.4 新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual

CPACK_DEBIAN_PACKAGE_REPLACES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES

設定 Debian 套件的 Replaces 欄位。套件可以在其控制檔案中宣告它們應該覆寫某些其他套件中的檔案,或完全取代其他套件。

必要:

預設值:

版本 3.4 新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_RECOMMENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS

設定 Debian 套件的 Recommends 欄位。允許套件宣告對其他套件的強烈但非絕對的依賴關係。

必要:

預設值:

版本 3.4 新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_SUGGESTS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS

設定 Debian 套件的 Suggests 欄位。允許套件宣告建議的套件安裝群組。

必要:

預設值:

版本 3.4 新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS 變數。

請參閱 https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps

CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS

在版本 3.6 中新增。

必要:

預設值:

OFF

允許自動產生 shlibs 控制檔案。相容性由 CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY 變數值定義。

注意

只有當程式庫同時設定了程式庫名稱和版本時,才會被考慮。這可以透過使用 set_target_properties() 命令設定 SOVERSION 屬性來完成。

CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY

在版本 3.6 中新增。

用於自動產生 shlibs 控制檔案的相容性策略。

必要:

預設值:

=

定義用於自動產生 shlibs 控制檔案的相容性策略。可能的值:=>=

請參閱 https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps

CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA

此變數允許進階使用者將自訂腳本新增到 control.tar.gz。典型的用法是用於 conffiles、postinst、postrm、prerm。

必要:

預設值:

用法

set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
    "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")

版本 3.4 新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA 變數。

CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION

版本 3.4 新增。

此變數指示是否應嚴格遵循關於控制檔案的 Debian 政策。

必要:

預設值:

FALSE

用法

set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)

這會覆寫原始檔案的權限,並遵循 Debian 政策 https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners 設定的規則

注意

除非此變數設定為 TRUE,否則原始檔案的權限將用於最終套件中。特別是,腳本在產生套件之前應具有適當的可執行標誌。

CPACK_DEBIAN_PACKAGE_SOURCE
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SOURCE

版本 3.5 新增。

設定二進制 Debian 套件的 Source 欄位。當二進制套件名稱與來源套件名稱不同時(特別是當從一個來源產生多個組件/二進制檔案時),應使用 Source 欄位指示產生二進制檔案的來源。

必要:

預設值:

請參閱 https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-source

注意

此值未經解譯。也可以傳遞參考來源套件的可選修訂版本號。

CPACK_DEBIAN_PACKAGE_MULTIARCH
CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH

設定 Debian 套件的 Multi-Arch 欄位。套件可以在其控制檔案中宣告它們應如何處理在同一部機器上安裝不同架構的套件的情況。

必要:

預設值:

版本 3.31 新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH 變數。

請參閱 https://wiki.debian.org/MultiArch/Hints

注意

此值已驗證。它必須是以下值之一:sameforeignallowed

偵錯資訊的封裝

版本 3.13 新增。

Dbgsym 套件包含用於偵錯封裝二進制檔案的偵錯符號。

Dbgsym 封裝有其自己的一組變數

CPACK_DEBIAN_DEBUGINFO_PACKAGE
CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE

啟用產生 dbgsym .ddeb 套件。

必要:

預設值:

OFF

注意

設定此項也會剝離產生的非 dbgsym 套件中的 ELF 檔案,這會導致偵錯資訊僅在 dbgsym 套件中可用。

注意

二進制檔案在封裝之前必須包含偵錯符號,因此對於 CMAKE_BUILD_TYPE 變數值,請使用 DebugRelWithDebInfo

此外,如果設定了 CPACK_STRIP_FILES,則檔案會在到達 DEB 產生器之前被剝離,因此將不包含偵錯符號,並且不會建置 dbgsym 套件。請勿與 CPACK_STRIP_FILES 一起使用。

在 Windows 上建置 Debian 套件

在版本 3.10 中新增。

為了將 UNIX 檔案權限從安裝階段傳達給 CPack DEB 產生器,使用了 cmake_mode_t NTFS 替代資料流 (ADT)。

當使用不支援 ADT 的檔案系統時,只能保留擁有者讀/寫權限。

可重現的套件

版本 3.13 新增。

環境變數 SOURCE_DATE_EPOCH 可以設定為 UNIX 時間戳記,定義為自 1970 年 1 月 1 日 00:00:00 UTC 以來的秒數,不包括閏秒。如果設定,CPack DEB 產生器將在其值中使用它作為套件中的時間戳記。