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 資源,它們基於歷史原因而存在,且不再維護,但可能仍然有用
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#deb-unix-only
CPack DEB 產生器特定變數列表
- CPACK_DEB_COMPONENT_INSTALL¶
為 CPackDEB 啟用組件封裝
- 必要:
否
- 預設值:
OFF
如果啟用 (
ON
),則會產生多個套件。預設情況下,會產生包含所有組件檔案的單一套件。
- CPACK_DEBIAN_PACKAGE_NAME¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME¶
設定套件控制欄位 (變數會自動轉換為小寫)。
- 必要:
是
- 預設值:
CPACK_PACKAGE_NAME
用於非基於組件的安裝CPACK_DEBIAN_PACKAGE_NAME
加上後綴-<COMPONENT>
用於基於組件的安裝。
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 套件版本
- 必要:
是
- 預設值:
此變數可能僅包含字母數字 (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
)
Added in version 3.6: 每個組件的
CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
變數。
- CPACK_DEBIAN_PACKAGE_DEPENDS¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS¶
設定此套件的 Debian 相依性。
- 必要:
否
- 預設值:
用於非基於組件的安裝的空字串
CPACK_DEBIAN_PACKAGE_DEPENDS
用於基於組件的安裝。
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_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 中所定義。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,最好 (在適用情況下) 是可以從中取得原始碼,且可以找到任何其他上游文件或資訊的網站。
- 必要:
否
- 預設值:
Added in version 3.12:
CMAKE_PROJECT_HOMEPAGE_URL
變數。注意
此欄位的內容是一個簡單的 URL,沒有任何周圍字元,例如 <>。
- CPACK_DEBIAN_PACKAGE_SHLIBDEPS¶
- CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS¶
可以設定為 ON,以便使用
dpkg-shlibdeps
來產生更好的套件相依性列表。- 必要:
否
- 預設值:
如果設定了
CPACK_DEBIAN_PACKAGE_SHLIBDEPS
或OFF
注意
如果您使用此功能,您可能需要將
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-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
用於基於組件的安裝。
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
類似,但方向相反:宣告套件可以增強另一個套件的功能。- 必要:
否
- 預設值:
用於非基於組件的安裝的空字串
CPACK_DEBIAN_PACKAGE_ENHANCES
用於基於組件的安裝。
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) 就無法再次重新設定。- 必要:
否
- 預設值:
用於非基於組件的安裝的空字串
CPACK_DEBIAN_PACKAGE_BREAKS
用於基於組件的安裝。
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
將不允許它們同時在系統上解壓縮。- 必要:
否
- 預設值:
用於非基於組件的安裝的空字串
CPACK_DEBIAN_PACKAGE_CONFLICTS
用於基於組件的安裝。
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
控制欄位中出現的套件。- 必要:
否
- 預設值:
用於非基於組件的安裝的空字串
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 中新增。
- 必要:
否
- 預設值:
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
欄位指示產生二進制檔案的來源。- 必要:
否
- 預設值:
用於非基於組件的安裝的空字串
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 套件。
- 必要:
否
- 預設值:
OFF
注意
設定此項也會剝離產生的非 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 產生器將在其值中使用它作為套件中的時間戳記。