CPack RPM 產生器¶
內建 (二進制) CPack RPM 產生器 (僅限 Unix)
CPack RPM 產生器特定的變數¶
CPack RPM 產生器可用於使用 CPack
建立 RPM 套件。CPack RPM 產生器是一個 CPack
產生器,因此它使用 CPACK_XXX
變數,這些變數由 CPack
使用。
CPack RPM 產生器具有特定功能,這些功能由特定的 CPACK_RPM_XXX
變數控制。
CPACK_RPM_<COMPONENT>_XXXX
變數可用於取得組件特定的值。但是請注意,<COMPONENT>
指的是以大寫字母寫成的分組名稱。它可以是組件名稱或組件群組名稱。通常,這些變數對應於 RPM spec 檔案實體。可以在這裡找到關於 spec 檔案的資訊 https://rpm.org/documentation。
在 3.6 版本中變更:變數的 <COMPONENT>
部分最好使用大寫 (例如,如果組件名為 foo
,則使用 CPACK_RPM_FOO_XXXX
變數名稱格式),這與其他 CPACK_<COMPONENT>_XXXX
變數相同。為了向後相容性 (CMake/CPack 3.5 及更低版本),仍然支援相同大小寫的組件 (例如,fOo
將用作 CPACK_RPM_fOo_XXXX
),用於在舊版本的 CMake/CPack 中定義的變數,但不保證用於未來將新增的變數。為了向後相容性,相同大小寫的組件變數也會覆蓋大寫版本 (如果兩者都存在)。
以下是一些 CPack RPM 產生器 Wiki 資源,這些資源基於歷史原因而存在,並且不再維護,但可能仍然有用
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Configuration
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/PackageGenerators#rpm-unix-only
CPack RPM 產生器特定變數列表
- CPACK_RPM_COMPONENT_INSTALL¶
為 CPack RPM 產生器啟用組件封裝
- 強制性:
否
- 預設值:
OFF
如果啟用 (
ON
),則會產生多個套件。預設情況下,會產生包含所有組件檔案的單一套件。
- CPACK_RPM_PACKAGE_SUMMARY¶
- CPACK_RPM_<component>_PACKAGE_SUMMARY¶
RPM 套件摘要。
- 強制性:
是
- 預設值:
在 3.2 版本中新增:每個組件的
CPACK_RPM_<component>_PACKAGE_SUMMARY
變數。
- CPACK_RPM_PACKAGE_NAME¶
- CPACK_RPM_<component>_PACKAGE_NAME¶
RPM 套件名稱。
- 強制性:
是
- 預設值:
在 3.5 版本中新增:每個組件的
CPACK_RPM_<component>_PACKAGE_NAME
變數。
- CPACK_RPM_FILE_NAME¶
- CPACK_RPM_<component>_FILE_NAME¶
在 3.6 版本中新增。
套件檔案名稱。
- 強制性:
是
- 預設值:
<CPACK_PACKAGE_FILE_NAME>[-<component>].rpm
,空格替換為 '-'
這可以設定為
RPM-DEFAULT
告訴
rpmbuild
自動產生套件檔案名稱。<檔案名稱>[.rpm]
使用給定的檔案名稱。
在 3.29 版本中變更:如果缺少
.rpm
後綴,將會自動新增。以前需要後綴。
注意
透過使用使用者提供的 spec 檔案,例如用於產生
debuginfo
套件的 rpm 巨集擴展,或僅僅使用多個組件,可能會產生多個 rpm 檔案,無論是從單個 spec 檔案還是從多個 spec 檔案 (每個組件執行都會產生自己的 spec 檔案)。在這種情況下,由於此變數設定或 spec 檔案內容結構,可能會發生重複的檔案名稱。重複的檔案會被覆寫,並且由封裝者負責以防止此類錯誤的方式設定變數。
- CPACK_RPM_MAIN_COMPONENT¶
在 3.8 版本中新增。
主要組件,封裝時不帶組件後綴。
- 強制性:
否
- 預設值:
此變數可以設定為任何組件或群組名稱,以便產生不帶檔案名稱和套件名稱中組件後綴的組件或群組 rpm 套件。
- CPACK_RPM_PACKAGE_EPOCH¶
在 3.10 版本中新增。
RPM 套件 epoch
- 強制性:
否
- 預設值:
可選數字,當變更版本控制方案或修正舊套件的版本號碼錯誤時,應增加此數字。
- CPACK_RPM_PACKAGE_VERSION¶
RPM 套件版本。
- 強制性:
是
- 預設值:
- CPACK_RPM_PACKAGE_ARCHITECTURE¶
- CPACK_RPM_<component>_PACKAGE_ARCHITECTURE¶
RPM 套件架構。
- 強制性:
是
- 預設值:
uname -m
輸出的原生架構
如果您知道您正在建置
noarch
套件,則可以將其設定為noarch
。在 3.3 版本中新增:每個組件的
CPACK_RPM_<component>_PACKAGE_ARCHITECTURE
變數。
- CPACK_RPM_PACKAGE_RELEASE¶
RPM 套件發行版本。
- 強制性:
是
- 預設值:
1
這是 RPM 套件本身的編號,即封裝的版本,而不是內容的版本 (請參閱
CPACK_RPM_PACKAGE_VERSION
)。如果先前的封裝有錯誤,和/或您想在此處放置花俏的 Linux 發行版特定編號,您可以變更預設值。
注意
這是進入 RPM Release:
欄位的字串。一些發行版 (例如 Fedora、CentOS) 需要 1%{?dist}
格式,而不僅僅是一個數字。%{?dist}
部分可以透過設定 CPACK_RPM_PACKAGE_RELEASE_DIST
來新增。
- CPACK_RPM_PACKAGE_RELEASE_DIST¶
在 3.6 版本中新增。
新增到 RPM
Release:
欄位的 dist 標籤。- 強制性:
否
- 預設值:
OFF
這是從目前發行版報告的
%{dist}
標籤,如果未設定 RPM 巨集,則為空%{dist}
。如果設定此變數,則 RPMRelease:
欄位值會設定為${CPACK_RPM_PACKAGE_RELEASE}%{?dist}
。
- CPACK_RPM_PACKAGE_LICENSE¶
RPM 套件許可證政策。
- 強制性:
是
- 預設值:
"unknown"
- CPACK_RPM_PACKAGE_GROUP¶
- CPACK_RPM_<component>_PACKAGE_GROUP¶
RPM 套件群組。
- 強制性:
是
- 預設值:
"unknown"
在 3.5 版本中新增:每個組件的
CPACK_RPM_<component>_PACKAGE_GROUP
變數。
- CPACK_RPM_PACKAGE_VENDOR¶
RPM 套件供應商。
- 強制性:
是
- 預設值:
如果設定 CPACK_PACKAGE_VENDOR,則為 CPACK_PACKAGE_VENDOR,否則為 "unknown"
- CPACK_RPM_PACKAGE_URL¶
- CPACK_RPM_<component>_PACKAGE_URL¶
專案 URL。
- 強制性:
否
- 預設值:
在 3.12 版本中新增:
CMAKE_PROJECT_HOMEPAGE_URL
變數。
- CPACK_RPM_PACKAGE_DESCRIPTION¶
- CPACK_RPM_<component>_PACKAGE_DESCRIPTION¶
RPM 套件描述。
- 強制性:
是
- 預設值:
如果設定
CPACK_COMPONENT_<compName>_DESCRIPTION
(僅限於基於組件的安裝程式),沒有可用的套件描述
在 3.2 版本中新增:每個組件的
CPACK_RPM_<component>_PACKAGE_DESCRIPTION
變數。
- CPACK_RPM_COMPRESSION_TYPE¶
RPM 壓縮類型。
- 強制性:
否
- 預設值:
(系統預設值)
可用於覆寫用於建置 RPM 的 RPM 壓縮類型。例如,某些 Linux 發行版預設為
xz
或zstd
。使用此選項,可以指定要使用的特定壓縮類型。可能的值為
lzma
Lempel–Ziv–Markov 鏈演算法
xz
XZ Utils 壓縮
bzip2
bzip2 Burrows–Wheeler 演算法
gzip
GNU Gzip 壓縮
zstd
在 3.31 版本中新增。
Zstandard 壓縮
- CPACK_RPM_PACKAGE_AUTOREQ¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQ¶
RPM spec autoreq 欄位。
- 強制性:
否
- 預設值:
可用於啟用 (
1
、yes
) 或停用 (0
、no
) 自動共用程式庫相依性偵測。相依性會新增至 requires 清單。注意
預設情況下,rpm 產生器會啟用自動相依性偵測。
- CPACK_RPM_PACKAGE_AUTOPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOPROV¶
RPM spec autoprov 欄位。
- 強制性:
否
- 預設值:
可用於啟用 (
1
、yes
) 或停用 (0
、no
) 自動列出套件提供的共用程式庫。共用程式庫會新增至 provides 清單。注意
預設情況下,rpm 產生器會啟用自動 provides 偵測。
- CPACK_RPM_PACKAGE_AUTOREQPROV¶
- CPACK_RPM_<component>_PACKAGE_AUTOREQPROV¶
RPM spec autoreqprov 欄位。
- 強制性:
否
- 預設值:
變數同時啟用/停用 autoreq 和 autoprov。請參閱
CPACK_RPM_PACKAGE_AUTOREQ
和CPACK_RPM_PACKAGE_AUTOPROV
以取得更多詳細資訊。注意
預設情況下,rpm 會啟用自動偵測功能。
- CPACK_RPM_PACKAGE_REQUIRES¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES¶
RPM spec requires 欄位。
- 強制性:
否
- 預設值:
可用於設定 RPM 相依性 (requires)。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8")
可以使用以下命令列印 RPM 檔案的必要套件清單
rpm -qp --requires file.rpm
- CPACK_RPM_PACKAGE_CONFLICTS¶
- CPACK_RPM_<component>_PACKAGE_CONFLICTS¶
RPM spec conflicts 欄位。
- 強制性:
否
- 預設值:
可用於設定負面 RPM 相依性 (conflicts)。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_PACKAGE_CONFLICTS "libxml2")
可以使用以下命令列印 RPM 檔案的衝突套件清單
rpm -qp --conflicts file.rpm
- CPACK_RPM_PACKAGE_REQUIRES_PRE¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_PRE¶
在 3.2 版本中新增。
RPM spec requires(pre) 欄位。
- 強制性:
否
- 預設值:
可用於設定 RPM 安裝前相依性 (requires(pre))。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_POST¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_POST¶
在 3.2 版本中新增。
RPM spec requires(post) 欄位。
- 強制性:
否
- 預設值:
可用於設定 RPM 安裝後相依性 (requires(post))。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_PACKAGE_REQUIRES_POST "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_POSTUN¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_POSTUN¶
在 3.2 版本中新增。
RPM spec requires(postun) 欄位。
- 強制性:
否
- 預設值:
可用於設定 RPM 解除安裝後相依性 (requires(postun))。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_PACKAGE_REQUIRES_POSTUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_REQUIRES_PREUN¶
- CPACK_RPM_<component>_PACKAGE_REQUIRES_PREUN¶
在 3.2 版本中新增。
RPM spec requires(preun) 欄位。
- 強制性:
否
- 預設值:
可用於設定 RPM 解除安裝前相依性 (requires(preun))。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_SUGGESTS¶
- CPACK_RPM_<component>_PACKAGE_SUGGESTS¶
RPM spec suggests 欄位。
- 強制性:
否
- 預設值:
可用於設定弱 RPM 相依性 (suggests)。如果
rpmbuild
不支援Suggests
標籤,CPack 將發出警告並忽略此變數。請注意,設定此變數時,您必須將整個值用引號括起來。
- CPACK_RPM_PACKAGE_PROVIDES¶
- CPACK_RPM_<component>_PACKAGE_PROVIDES¶
RPM spec provides 欄位。
- 強制性:
否
- 預設值:
可用於設定 RPM 相依性 (provides)。可以使用以下命令列印 RPM 檔案的 provided 套件清單
rpm -qp --provides file.rpm
- CPACK_RPM_PACKAGE_OBSOLETES¶
- CPACK_RPM_<component>_PACKAGE_OBSOLETES¶
RPM spec obsoletes 欄位。
- 強制性:
否
- 預設值:
可用於設定此套件已過時的 RPM 套件。
- CPACK_RPM_PACKAGE_RELOCATABLE¶
建置可重定位的 RPM。
- 強制性:
否
- 預設值:
CPACK_PACKAGE_RELOCATABLE
如果此變數設定為 TRUE 或 ON,CPack RPM 產生器將嘗試建置可重定位的 RPM 套件。可以使用以下命令安裝可重定位的 RPM
rpm --prefix or --relocate
為了將其安裝在替代位置,請參閱 rpm(8)。請注意,如果
CPACK_SET_DESTDIR
設定為ON
,則目前可能會失敗。如果設定CPACK_SET_DESTDIR
,您將收到警告訊息,但如果安裝了具有絕對路徑的檔案,您將會得到非預期的行為。
- CPACK_RPM_SPEC_INSTALL_POST¶
自 2.8.12 版本起已棄用:請改用
CPACK_RPM_SPEC_MORE_DEFINE
。- 強制性:
否
- 預設值:
可用於覆寫產生的 spec 檔案中的
__spec_install_post
區段。這會影響套件建立期間的安裝步驟,而不是套件安裝期間的安裝步驟。若要新增在套件安裝期間執行的操作,請改用CPACK_RPM_POST_INSTALL_SCRIPT_FILE
。
- CPACK_RPM_SPEC_MORE_DEFINE¶
RPM 擴展 spec 定義行。
- 強制性:
否
- 預設值:
可用於將任何
%define
行新增至產生的 spec 檔案。其用途的一個範例是防止剝離可執行檔 (但請注意,這也可能停用其他預設的安裝後處理)set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true")
- CPACK_RPM_PACKAGE_DEBUG¶
切換 CPack RPM 產生器偵錯輸出。
- 強制性:
否
- 預設值:
可以在調用 cpack 時設定,以便在 CPack RPM 執行期間追蹤偵錯資訊。例如,您可以像這樣啟動 CPack
cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM
- CPACK_RPM_USER_BINARY_SPECFILE¶
- CPACK_RPM_<componentName>_USER_BINARY_SPECFILE¶
使用者提供的 spec 檔案。
- 強制性:
否
- 預設值:
可以由使用者設定,以便指定要由 CPack RPM 產生器使用的 USER 二進制 spec 檔案,而不是產生檔案。指定的檔案將由 configure_file(@ONLY) 處理。
- CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE¶
Spec 檔案範本。
- 強制性:
否
- 預設值:
如果設定,CPack 將產生 USER 指定的二進制 spec 檔案的範本,並停止並顯示錯誤。例如,像這樣啟動 CPack
cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM
然後,使用者可以使用此檔案來手工製作自己的二進制 spec 檔案,該檔案可以與
CPACK_RPM_USER_BINARY_SPECFILE
一起使用。
- CPACK_RPM_PRE_INSTALL_SCRIPT_FILE¶
- CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE¶
- CPACK_RPM_PRE_TRANS_SCRIPT_FILE¶
包含安裝前/解除安裝前/交易前腳本的檔案路徑。
- 強制性:
否
- 預設值:
可用於在 spec 檔案中嵌入安裝前/解除安裝前/交易前腳本。參考的腳本檔案 (或兩者) 將被讀取,並直接放在
%pre
或%preun
區段之後。如果CPACK_RPM_COMPONENT_INSTALL
設定為 ON,則可以使用CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE
、CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE
和CPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE
覆寫每個組件的安裝/解除安裝/交易腳本。可以使用以下命令驗證已包含哪個 scriptletrpm -qp --scripts package.rpm
在 3.18 版本中新增:
CPACK_RPM_PRE_TRANS_SCRIPT_FILE
變數。
- CPACK_RPM_POST_INSTALL_SCRIPT_FILE¶
- CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE¶
- CPACK_RPM_POST_TRANS_SCRIPT_FILE¶
包含安裝後/解除安裝後/交易後腳本的檔案路徑。
- 強制性:
否
- 預設值:
可用於在 spec 檔案中嵌入安裝後/解除安裝後/交易後腳本。參考的腳本檔案 (或兩者) 將被讀取,並直接放在
%post
或%postun
區段之後。如果CPACK_RPM_COMPONENT_INSTALL
設定為 ON,則可以使用CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE
、CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE
和CPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE
覆寫每個組件的安裝/解除安裝/交易腳本。可以使用以下命令驗證已包含哪個 scriptletrpm -qp --scripts package.rpm
在 3.18 版本中新增:
CPACK_RPM_POST_TRANS_SCRIPT_FILE
變數。
- CPACK_RPM_USER_FILELIST¶
- CPACK_RPM_<COMPONENT>_USER_FILELIST¶
- 強制性:
否
- 預設值:
可用於明確指定 spec 檔案中的
%(<directive>)
檔案行。例如%config(noreplace)
或%files
區段中可以找到的任何其他指示詞。由於 CPack RPM 產生器正在產生檔案 (和目錄) 列表,因此將從產生的列表中移除CPACK_RPM_<COMPONENT>_USER_FILELIST
列表的使用者指定檔案。如果引用目錄,請勿新增尾部斜線。在 3.8 版本中新增:您可以在每行中使用多個指示詞,如
%attr(600,root,root) %config(noreplace)
。
- CPACK_RPM_CHANGELOG_FILE¶
RPM 變更日誌檔案。
- 強制性:
否
- 預設值:
可用於在 spec 檔案中嵌入變更日誌。參考的檔案將被讀取,並直接放在
%changelog
區段之後。
- CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST¶
要排除的路徑列表。
- 強制性:
否
- 預設值:
- 預設情況下,以下路徑會被排除
/etc
/etc/init.d
/usr
/usr/bin
/usr/include
/usr/lib
/usr/libx32
/usr/lib64
/usr/share
/usr/share/aclocal
/usr/share/doc
可用於從 CPack RPM 發現的自動產生的路徑列表中排除路徑 (目錄或檔案)。如果使用者未定義變數,則預設值包含一組合理的值。如果變數由使用者定義,則 CPack RPM 產生器將不會使用任何預設路徑。如果您想將某些路徑新增至預設列表,則可以使用
CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
變數。在 3.10 版本中新增:將
/usr/share/aclocal
新增至預設排除列表。
- CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION¶
要排除的其他路徑列表。
- 強制性:
否
- 預設值:
可用於從初始預設排除路徑列表中新增更多排除路徑 (目錄或檔案)。請參閱
CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
。
- CPACK_RPM_RELOCATION_PATHS¶
在 3.2 版本中新增。
套件重定位路徑列表。
- 強制性:
否
- 預設值:
可用於為每個可重定位的 RPM 指定多個重定位路徑。變數包含重定位路徑列表,如果路徑是相對路徑,則會以
CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
的值或CPACK_PACKAGING_INSTALL_PREFIX
的值作為前綴 (如果未提供組件版本)。變數不是基於組件的,因為其內容可用於同時為例如二進制目錄和文件目錄設定不同的路徑前綴。只有特定組件所需的前綴才會新增至該組件 - 組件必須包含至少一個檔案/目錄/符號連結,且具有CPACK_RPM_RELOCATION_PATHS
前綴,才能新增特定重定位路徑。如果套件不包含任何重定位路徑,或包含重定位路徑之外的檔案/目錄/符號連結,則套件將印出AUTHOR_WARNING
,指出 RPM 將部分可重定位。
- CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX¶
在 3.2 版本中新增。
每個組件重新定位路徑安裝前綴。
- 強制性:
否
- 預設值:
可用於為可重定位的 RPM 封包設定每個組件的
CPACK_PACKAGING_INSTALL_PREFIX
。
- CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION¶
- CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION¶
在版本 3.3 中新增。
從重新定位路徑列表中移除預設安裝前綴。
- 強制性:
否
- 預設值:
CPACK_PACKAGING_INSTALL_PREFIX
或CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
被視為重新定位路徑之一
可用於從可重定位的 RPM 前綴路徑中移除
CPACK_PACKAGING_INSTALL_PREFIX
和CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
。
- CPACK_RPM_ADDITIONAL_MAN_DIRS¶
在版本 3.3 中新增。
- 強制性:
否
- 預設值:
- 預設新增的正規表示式取自
brp-compress
RPM 巨集 /usr/man/man.*
/usr/man/.*/man.*
/usr/info.*
/usr/share/man/man.*
/usr/share/man/.*/man.*
/usr/share/info.*
/usr/kerberos/man.*
/usr/X11R6/man/man.*
/usr/lib/perl5/man/man.*
/usr/share/doc/.*/man/man.*
/usr/lib/.*/man/man.*
- 預設新增的正規表示式取自
可用於設定額外的 man 目錄,這些目錄可能會被 brp-compress RPM 巨集壓縮。變數內容必須是指向包含 man 檔案的目錄或直接指向 man 檔案的正規表示式列表。請注意,為了壓縮 man 頁面,路徑也必須存在於 brp-compress RPM 腳本中,並且 brp-compress 腳本必須由作業系統新增到 RPM 配置中。
- CPACK_RPM_DEFAULT_USER¶
- CPACK_RPM_<compName>_DEFAULT_USER¶
在 3.6 版本中新增。
RPM 內容的預設使用者擁有權
- 強制性:
否
- 預設值:
root
值應為使用者名稱而非 UID。請注意,
<compName>
必須為大寫。
- CPACK_RPM_DEFAULT_GROUP¶
- CPACK_RPM_<compName>_DEFAULT_GROUP¶
在 3.6 版本中新增。
RPM 內容的預設群組擁有權
- 強制性:
否
- 預設值:
root
值應為群組名稱而非 GID。請注意,
<compName>
必須為大寫。
- CPACK_RPM_DEFAULT_FILE_PERMISSIONS¶
- CPACK_RPM_<compName>_DEFAULT_FILE_PERMISSIONS¶
在 3.6 版本中新增。
用於封裝檔案的預設權限
- 強制性:
否
- 預設值:
(系統預設值)
接受的值是包含 PERMISSIONS 的列表。有效的權限為
OWNER_READ
OWNER_WRITE
OWNER_EXECUTE
GROUP_READ
GROUP_WRITE
GROUP_EXECUTE
WORLD_READ
WORLD_WRITE
WORLD_EXECUTE
請注意,
<compName>
必須為大寫。
- CPACK_RPM_DEFAULT_DIR_PERMISSIONS¶
- CPACK_RPM_<compName>_DEFAULT_DIR_PERMISSIONS¶
在 3.6 版本中新增。
用於封裝目錄的預設權限
- 強制性:
否
- 預設值:
(系統預設值)
接受的值是包含 PERMISSIONS 的列表。有效的權限與
CPACK_RPM_DEFAULT_FILE_PERMISSIONS
相同。請注意,<compName>
必須為大寫。
- CPACK_RPM_INSTALL_WITH_EXEC¶
在版本 3.11 中新增。
強制對程式和共享函式庫設定執行權限
- 強制性:
否
- 預設值:
(系統預設值)
強制對程式和共享函式庫設定擁有者、群組和世界可執行權限。這可用於在 Debian 等系統上建立有效的 rpm 封包,在這些系統上,共享函式庫未設定執行權限。
注意
在從二進制檔案中分離除錯符號以產生除錯資訊封包期間,沒有執行權限的程式和共享函式庫將被忽略。
符號連結的封裝¶
在版本 3.3 中新增。
CPack RPM 產生器支援符號連結的封裝
execute_process(COMMAND ${CMAKE_COMMAND}
-E create_symlink <relative_path_location> <symlink_name>)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/<symlink_name>
DESTINATION <symlink_location> COMPONENT libraries)
符號連結將在新增到封包之前進行最佳化(路徑將在可能的情況下縮短),或者如果偵測到多個重新定位路徑,則會產生安裝後符號連結重新定位腳本。
符號連結可能指向未由同一封包封裝的位置(不同的組件或甚至完全未封裝),但在確定符號連結是否應建立或存在於安裝後腳本中時,這些位置將被視為封包的一部分 - 具體取決於重新定位路徑。
在版本 3.6 中變更:指向封裝路徑外部位置的符號連結會產生警告,並被視為不可重新定位的永久符號連結。在舊版本的 CMake 中,這種情況會產生錯誤。
目前存在一些限制
對於基於組件的封裝,在處理符號連結時不會檢查組件之間的相互依賴性。指向不同組件內容的符號連結與指向不會被封裝的位置的處理方式相同。
指向通過一個或多個中間符號連結的位置的符號連結將不會被區別處理 - 如果中間符號連結也位於可重新定位的路徑上,則在封包安裝期間重新定位它可能會導致初始符號連結指向無效的位置。
除錯資訊的封裝¶
在版本 3.7 中新增。
除錯資訊封包包含用於除錯已封裝二進制檔案的除錯符號和原始碼。
除錯資訊 RPM 封裝有其自己的一組變數
- CPACK_RPM_DEBUGINFO_PACKAGE¶
- CPACK_RPM_<component>_DEBUGINFO_PACKAGE¶
啟用產生除錯資訊 RPM 封包。
- 強制性:
否
- 預設值:
OFF
注意
二進制檔案在封裝之前必須包含除錯符號,因此對於 CMAKE_BUILD_TYPE
變數值,請使用 Debug
或 RelWithDebInfo
。
此外,如果設定了 CPACK_STRIP_FILES
,則檔案將在進入 RPM 產生器之前被去除符號,因此將不包含除錯符號,並且不會建置除錯資訊封包。請勿與 CPACK_STRIP_FILES
一起使用。
注意
從沒有二進制檔案、有二進制檔案但沒有執行權限或沒有除錯符號的封包產生的封包將導致封裝終止。
- CPACK_BUILD_SOURCE_DIRS¶
提供從中建置二進制檔案的原始碼檔案根目錄的位置。
- 強制性:
如果設定了
CPACK_RPM_DEBUGINFO_PACKAGE
,則為是- 預設值:
注意
對於 CMake 專案,預設情況下,CPACK_BUILD_SOURCE_DIRS
設定為指向 CMAKE_SOURCE_DIR
和 CMAKE_BINARY_DIR
路徑。
注意
路徑前綴不屬於 CPACK_BUILD_SOURCE_DIRS
提供的任何位置下的原始碼將不會出現在除錯資訊封包中。
- CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX¶
- CPACK_RPM_<component>_BUILD_SOURCE_DIRS_PREFIX¶
在封包安裝期間放置原始碼的位置的前綴。
- 強制性:
如果設定了
CPACK_RPM_DEBUGINFO_PACKAGE
,則為是- 預設值:
/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}
以及組件封裝的/usr/src/debug/${CPACK_PACKAGE_FILE_NAME}-<component>
注意
每個原始碼路徑前綴都會額外加上 src_<index>
後綴,其中 index 是 CPACK_BUILD_SOURCE_DIRS
變數中使用的路徑的索引。這會產生 ${CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX}/src_<index>
替換路徑。限制是替換的路徑部分必須短於或等於其替換項的長度。如果不是這種情況,則必須將 CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX
變數設定為較短的路徑,或者原始碼目錄必須放置在較長的路徑上。
- CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS¶
包含應從除錯資訊封包中排除的原始碼的目錄。
- 強制性:
否
- 預設值:
- 預設情況下,以下路徑會被排除
/usr
/usr/src
/usr/src/debug
列出的路徑歸其他 RPM 封包所有,因此在解除安裝除錯資訊封包時不應刪除。
- CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION¶
應附加到
CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS
以進行排除的路徑。- 強制性:
否
- 預設值:
- CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE¶
在 3.8 版本中新增。
即使設定了組件封裝,也建立單個除錯資訊封包。
- 強制性:
否
- 預設值:
OFF
啟用此變數時,即使啟用了組件封裝,也會產生單個除錯資訊封包。
將此功能與組件封裝結合使用,並且有多個組件時,此變數需要設定
CPACK_RPM_MAIN_COMPONENT
。
注意
如果未設定任何 CPACK_RPM_<component>_DEBUGINFO_PACKAGE
變數,則當設定 CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE
時,CPACK_RPM_DEBUGINFO_PACKAGE
會自動設定為 ON
。
- CPACK_RPM_DEBUGINFO_FILE_NAME¶
- CPACK_RPM_<component>_DEBUGINFO_FILE_NAME¶
在版本 3.9 中新增。
除錯資訊封包檔案名稱。
- 強制性:
否
- 預設值:
rpmbuild 工具產生的封包檔案名稱
或者,提供的除錯資訊封包檔案名稱必須以
.rpm
後綴結尾,並且應與其他產生的封包的檔案名稱不同。變數可能包含
@cpack_component@
佔位符,如果啟用了組件封裝,它將被組件名稱替換,否則它將刪除該佔位符。將變數設定為
RPM-DEFAULT
可用於明確地將檔案名稱產生設定為預設值。
注意
CPACK_RPM_FILE_NAME
也支援 rpmbuild 工具產生的封包檔案名稱 - 預設情況下停用,但可以通過將變數設定為 RPM-DEFAULT
來啟用。
原始碼封裝 (SRPM)¶
在版本 3.7 中新增。
通過設定 CPACK_RPM_PACKAGE_SOURCES
變數來啟用 SRPM 封裝,同時通常使用 CPACK_INSTALLED_DIRECTORIES
變數來提供包含 CMakeLists.txt 和原始碼檔案的目錄。
對於 CMake 專案,將通過執行以下命令來產生 SRPM 封包
cpack -G RPM --config ./CPackSourceConfig.cmake
注意
產生的 SRPM 封包預期將使用 cmake(1)
可執行檔建置,並使用 cpack(1)
可執行檔封裝,因此 CMakeLists.txt 必須位於根原始碼目錄中,並且必須能夠通過執行 cpack -G
命令來產生二進制 rpm 封包。當從產生的 SRPM 封包產生二進制 rpm 封包時,這兩個可執行檔以及 rpmbuild 也必須存在。
一旦產生 SRPM 封包,就可以通過建立用於 rpm 產生的目錄結構並執行 rpmbuild 工具來用於產生二進制封包
mkdir -p build_dir/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
rpmbuild --define "_topdir <path_to_build_dir>" --rebuild <SRPM_file_name>
產生的封包將位於 build_dir/RPMS 目錄或其子目錄中。
注意
SRPM 封包在內部使用 CPack/RPM 產生器來產生二進制封包,因此 CMakeScripts.txt 可以在 SRPM 到二進制 rpm 產生步驟期間決定封包應包含哪些內容以及應如何封裝它們(單體式或組件)。例如,CMake 可以通過讀取封包管理器在啟動產生二進制 rpm 封包的過程之前設定的環境變數來決定這一點。這樣,單個 SRPM 封包可用於在不同平台上根據平台的封裝規則產生不同的二進制 rpm 封包。
原始碼 RPM 封裝有其自己的一組變數
- CPACK_RPM_PACKAGE_SOURCES¶
內容是否應封裝為原始碼 rpm(預設為二進制 rpm)。
- 強制性:
否
- 預設值:
OFF
注意
對於 cmake 專案,在 CPackConfig.cmake 和 ON
在 CPackSourceConfig.cmake 產生的檔案中,CPACK_RPM_PACKAGE_SOURCES
變數在 CPackConfig.cmake 中設定為 OFF
。
- CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX¶
封裝安裝前綴,將在
CPACK_PACKAGING_INSTALL_PREFIX
變數中提供,以產生二進制 RPM 封包。- 強制性:
是
- 預設值:
/
- CPACK_RPM_BUILDREQUIRES¶
原始碼 rpm 建置相依性列表。
- 強制性:
否
- 預設值:
可用於設定原始碼 RPM 建置相依性 (BuildRequires)。請注意,設定此變數時,您必須將整個值用引號括起來,例如
set(CPACK_RPM_BUILDREQUIRES "python >= 2.5.0, cmake >= 2.8")
- CPACK_RPM_REQUIRES_EXCLUDE_FROM¶
在版本 3.22 中新增。
- 強制性:
否
- 預設值:
可用於防止相依性產生器掃描特定檔案或目錄以查找相依性。請注意,您可以使用正規表示式來匹配所有目錄或檔案,例如
set(CPACK_RPM_REQUIRES_EXCLUDE_FROM "bin/libqsqloci.*\\.so.*")