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 資源,這些資源是出於歷史原因而存在,並且不再維護,但可能仍然有用
CPack RPM 產生器特定變數的列表
- CPACK_RPM_COMPONENT_INSTALL¶
啟用 CPack RPM 產生器的元件封裝
- 必填:
否
- 預設值:
關閉
如果啟用(
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 檔案,rpm 巨集擴充功能(例如用於產生
debuginfo
套件)或僅使用多個元件,可能會產生多個 rpm 檔案,無論是從單一 spec 檔案還是從多個 spec 檔案(每個元件執行都會產生自己的 spec 檔案)。在這種情況下,由於此變數設定或 spec 檔案內容結構,可能會發生重複的檔案名稱。重複的檔案會被覆寫,而封裝者有責任以防止此類錯誤的方式設定變數。
- CPACK_RPM_MAIN_COMPONENT¶
在 3.8 版本中新增。
未封裝元件後綴的主要元件。
- 必填:
否
- 預設值:
此變數可以設定為任何元件或群組名稱,以便產生沒有檔案名稱和套件名稱中的元件後綴的元件或群組 rpm 套件。
- CPACK_RPM_PACKAGE_EPOCH¶
在 3.10 版本中新增。
RPM 套件紀元
- 必填:
否
- 預設值:
當變更版本化架構或修正較舊套件的版本號碼錯誤時,應遞增的可選數字。
- 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}
格式,而不僅僅是一個數字。可以透過設定 CPACK_RPM_PACKAGE_RELEASE_DIST
來新增 %{?dist}
部分。
- CPACK_RPM_PACKAGE_RELEASE_DIST¶
在 3.6 版本中新增。
新增至 RPM
Release:
欄位的 dist 標籤。- 必填:
否
- 預設值:
關閉
這是目前發行版本所回報的
%{dist}
標籤,如果未設定 RPM 巨集,則為空的%{dist}
。如果設定此變數,則 RPM 的Release:
欄位值會設定為${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,否則為 "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
(僅限於基於元件的安裝程式),如果已設定,則為
CPACK_PACKAGE_DESCRIPTION_FILE
,否則為沒有可用的套件描述
在 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)。請注意,您必須將完整的 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)。請注意,您必須將完整的 requires 字串以引號括起來,例如
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))。請注意,您必須將完整的 requires 字串以引號括起來,例如
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))。請注意,您必須將完整的 requires 字串以引號括起來,例如
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))。請注意,您必須將完整的 requires 字串以引號括起來,例如
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))。請注意,您必須將完整的 requires 字串以引號括起來,例如
set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts")
- CPACK_RPM_PACKAGE_SUGGESTS¶
- CPACK_RPM_<component>_PACKAGE_SUGGESTS¶
RPM spec 的 suggest 欄位。
- 必填:
否
- 預設值:
可用於設定弱 RPM 相依性 (suggests)。如果
rpmbuild
不支援Suggests
標籤,CPack 會發出警告並忽略此變數。請注意,您必須將完整的 requires 字串以引號括起來。
- CPACK_RPM_PACKAGE_PROVIDES¶
- CPACK_RPM_<component>_PACKAGE_PROVIDES¶
RPM spec 的 provides 欄位。
- 必填:
否
- 預設值:
可用於設定 RPM 相依性 (provides)。RPM 檔案提供的套件清單可以使用以下指令列印:
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 產生器要使用的使用者二進位 spec 檔案,而不是產生檔案。指定的檔案將由 configure_file( @ONLY) 處理。
- CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE¶
Spec 檔案範本。
- 必填:
否
- 預設值:
如果設定此選項,CPack 將會產生使用者指定的二進位 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
覆寫每個元件的安裝/解除安裝/交易腳本。可以使用以下方式驗證已包含哪個小腳本rpm -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
覆寫每個元件的安裝/解除安裝/交易腳本。可以使用以下方式驗證已包含哪個小腳本rpm -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.*
- 預設添加的正規表達式取自
可用於設定可能被 brp-compress RPM 巨集壓縮的其他 man 目錄。變數內容必須是一個正規表達式列表,指向包含 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 套件的產生。
- 必填:
否
- 預設值:
關閉
注意
二進制檔在封裝之前必須包含除錯符號,因此對於 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 版本中新增。
即使設定了元件封裝,也建立單一偵錯資訊套件。
- 必填:
否
- 預設值:
關閉
啟用此變數時,即使啟用元件封裝,也會產生單一偵錯資訊套件。
當將此功能與元件封裝結合使用,並且有多個元件時,此變數需要設定
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)。
- 必填:
否
- 預設值:
關閉
注意
對於 cmake 專案,CPACK_RPM_PACKAGE_SOURCES
變數在 CPackConfig.cmake 中設定為 OFF
,在 CPackSourceConfig.cmake 產生的檔案中設定為 ON
。
- 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.*")