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 的組件封裝

必要性:

預設值:

關閉

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

CPACK_DEBIAN_PACKAGE_NAME
CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME

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

必要性:

預設值:

在 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 產生器向後相容,這不是預設值。如果沒有這個設定,可能會發生重複的名稱。重複的檔案會被覆寫,並且由封裝人員以防止此類錯誤的方式設定變數。

<file-name>[.deb]

使用給定的檔案名稱。

在 3.29 版本中變更: 如果檔案名稱不是以 .deb.ipk 結尾,則會自動新增 .deb 後綴。先前需要此後綴。

<file-name>.ipk

在 3.10 版本中新增。

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

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

在 3.6 版本中新增: 每個組件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE 變數。

CPACK_DEBIAN_PACKAGE_DEPENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS

設定此套件的 Debian 相依性。

必要性:

預設值:

在 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 是空字串,則只會為此組件設定自動發現的相依性。

在 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 中定義。

在 3.3 版本新增:每個元件的 CPACK_COMPONENT_<compName>_DESCRIPTION 變數。

在 3.16 版本新增:每個元件的 CPACK_DEBIAN_<COMPONENT>_DESCRIPTION 變數。

在 3.16 版本新增:CPACK_PACKAGE_DESCRIPTION_FILE 變數。

CPACK_DEBIAN_PACKAGE_SECTION
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION

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

必要性:

預設值:

devel

在 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

在 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

在 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 正常運作。但是,您應該只對無法以其他方式解析的私有共享函式庫執行此操作。

在 3.3 版本新增:每個元件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS 變數。

在 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 在開始安裝宣告先行相依性的套件之前,先完成命名套件的安裝。

必要性:

預設值:

在 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 類似,但運作方向相反:宣告一個套件可以增強另一個套件的功能。

必要性:

預設值:

在 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) 時,除非先解除設定將被破壞的套件 (B),否則 dpkg 不允許宣告 Breaks 的套件 (P) 被解壓縮。只要套件 (P) 已設定,先前解除設定的套件 (B) 就無法再次設定。

必要性:

預設值:

在 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 不允許它們同時在系統上解壓縮。

必要性:

預設值:

在 3.4 版本中新增: 每個元件的 CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS 變數。

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

注意

這是一個比 Breaks 更強的限制,它會防止被破壞的套件在破壞套件處於「未解壓縮」狀態時被設定,但允許兩個套件同時解壓縮。

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 版本中新增。

必要性:

預設值:

關閉

允許自動產生 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 套件的產生。

必要性:

預設值:

關閉

注意

設定此選項也會將產生的非 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 產生器將在其套件中使用此值作為時間戳記。