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¶
設定套件控制欄位(變數會自動轉換為小寫)。
- 必要性:
是
- 預設值:
非基於組件的安裝的
CPACK_PACKAGE_NAME
基於組件的安裝的
CPACK_DEBIAN_PACKAGE_NAME
,後綴為-<COMPONENT>
。
在 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 套件版本
- 必要性:
是
- 預設值:
此變數只能包含字母數字 (A-Za-z0-9) 和字元 . + - ~(句點、加號、連字號、波浪號),並且應該以數字開頭。如果未設定
CPACK_DEBIAN_PACKAGE_RELEASE
,則不允許使用連字號。注意
為了與 CMake 3.9 及更低版本向後相容,當
CPACK_DEBIAN_PACKAGE_RELEASE
和CPACK_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 相依性。
- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
基於組件的安裝的
CPACK_DEBIAN_PACKAGE_DEPENDS
。
在 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_INSTALL
、CPACK_DEBIAN_PACKAGE_SHLIBDEPS
或CPACK_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_DEBIAN_<COMPONENT>_DESCRIPTION
(僅限於以元件為基礎的安裝程式)若有設定,或CPACK_DEBIAN_PACKAGE_DESCRIPTION
若有設定,或CPACK_COMPONENT_<compName>_DESCRIPTION
(僅限於以元件為基礎的安裝程式)若有設定,或CPACK_PACKAGE_DESCRIPTION
若有設定,或在
CPACK_PACKAGE_DESCRIPTION_FILE
中指定之檔案的內容若有設定
若在那之後仍未設定描述,則會使用
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,最好是(在適用情況下)可以取得原始程式碼的網站,以及任何其他上游文件或資訊的網站。
- 必要性:
否
- 預設值:
在 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-shlibdeps
。dpkg-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
在開始安裝宣告先行相依性的套件之前,先完成命名套件的安裝。- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_PREDEPENDS
。
在 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
類似,但運作方向相反:宣告一個套件可以增強另一個套件的功能。- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_ENHANCES
。
在 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) 就無法再次設定。- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_BREAKS
。
在 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
不允許它們同時在系統上解壓縮。- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_CONFLICTS
。
在 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 控制欄位中的套件。
- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_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 欄位。套件可以在其控制檔中宣告它們應該覆寫某些其他套件中的檔案,或完全取代其他套件。
- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_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
欄位。允許套件宣告對其他套件的強烈但非絕對的相依性。- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_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 欄位。允許套件宣告建議的套件安裝群組。
- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
針對基於元件的安裝的
CPACK_DEBIAN_PACKAGE_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
欄位指示二進制檔的產生來源。- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
CPACK_DEBIAN_PACKAGE_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 欄位。套件可以在其控制檔中宣告它們應如何處理在同一機器上安裝不同架構套件的情況。
- 必要性:
否
- 預設值:
非基於組件的安裝的空字串
CPACK_DEBIAN_PACKAGE_MULTIARCH
用於基於元件的安裝。
在 3.31 版本中新增: 每個元件的
CPACK_DEBIAN_<COMPONENT>_PACKAGE_MULTIARCH
變數。請參閱 https://wiki.debian.org/MultiArch/Hints
注意
此值會經過驗證。它必須是下列值之一:
same
、foreign
、allowed
。
偵錯資訊的封裝¶
在 3.13 版本中新增。
Dbgsym 套件包含用於偵錯封裝二進制檔的偵錯符號。
Dbgsym 封裝有其自己的一組變數
- CPACK_DEBIAN_DEBUGINFO_PACKAGE¶
- CPACK_DEBIAN_<component>_DEBUGINFO_PACKAGE¶
啟用 dbgsym .ddeb 套件的產生。
- 必要性:
否
- 預設值:
關閉
注意
設定此選項也會將產生的非 dbgsym 套件中的 ELF 檔案剝離,這會導致偵錯資訊僅在 dbgsym 套件中可用。
注意
二進制檔在封裝之前必須包含偵錯符號,因此請使用 CMAKE_BUILD_TYPE
變數值的 Debug
或 RelWithDebInfo
。
此外,如果設定了 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 產生器將在其套件中使用此值作為時間戳記。