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 產生器啟用組件封裝

強制性:

預設值:

OFF

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

CPACK_RPM_PACKAGE_SUMMARY
CPACK_RPM_<component>_PACKAGE_SUMMARY

RPM 套件摘要。

強制性:

預設值:

CPACK_PACKAGE_DESCRIPTION_SUMMARY

在 3.2 版本中新增:每個組件的 CPACK_RPM_<component>_PACKAGE_SUMMARY 變數。

CPACK_RPM_PACKAGE_NAME
CPACK_RPM_<component>_PACKAGE_NAME

RPM 套件名稱。

強制性:

預設值:

CPACK_PACKAGE_NAME

在 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_PACKAGE_VERSION

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}。如果設定此變數,則 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,則為 CPACK_PACKAGE_VENDOR,否則為 "unknown"

CPACK_RPM_PACKAGE_URL
CPACK_RPM_<component>_PACKAGE_URL

專案 URL。

強制性:

預設值:

CMAKE_PROJECT_HOMEPAGE_URL

在 3.12 版本中新增:CMAKE_PROJECT_HOMEPAGE_URL 變數。

CPACK_RPM_PACKAGE_DESCRIPTION
CPACK_RPM_<component>_PACKAGE_DESCRIPTION

RPM 套件描述。

強制性:

預設值:

在 3.2 版本中新增:每個組件的 CPACK_RPM_<component>_PACKAGE_DESCRIPTION 變數。

CPACK_RPM_COMPRESSION_TYPE

RPM 壓縮類型。

強制性:

預設值:

(系統預設值)

可用於覆寫用於建置 RPM 的 RPM 壓縮類型。例如,某些 Linux 發行版預設為 xzzstd。使用此選項,可以指定要使用的特定壓縮類型。

可能的值為

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 欄位。

強制性:

預設值:

可用於啟用 (1yes) 或停用 (0no) 自動共用程式庫相依性偵測。相依性會新增至 requires 清單。

注意

預設情況下,rpm 產生器會啟用自動相依性偵測。

CPACK_RPM_PACKAGE_AUTOPROV
CPACK_RPM_<component>_PACKAGE_AUTOPROV

RPM spec autoprov 欄位。

強制性:

預設值:

可用於啟用 (1yes) 或停用 (0no) 自動列出套件提供的共用程式庫。共用程式庫會新增至 provides 清單。

注意

預設情況下,rpm 產生器會啟用自動 provides 偵測。

CPACK_RPM_PACKAGE_AUTOREQPROV
CPACK_RPM_<component>_PACKAGE_AUTOREQPROV

RPM spec autoreqprov 欄位。

強制性:

預設值:

變數同時啟用/停用 autoreq 和 autoprov。請參閱 CPACK_RPM_PACKAGE_AUTOREQCPACK_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_FILECPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILECPACK_RPM_<COMPONENT>_PRE_TRANS_SCRIPT_FILE 覆寫每個組件的安裝/解除安裝/交易腳本。可以使用以下命令驗證已包含哪個 scriptlet

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_FILECPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILECPACK_RPM_<COMPONENT>_POST_TRANS_SCRIPT_FILE 覆寫每個組件的安裝/解除安裝/交易腳本。可以使用以下命令驗證已包含哪個 scriptlet

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

每個組件重新定位路徑安裝前綴。

強制性:

預設值:

CPACK_PACKAGING_INSTALL_PREFIX

可用於為可重定位的 RPM 封包設定每個組件的 CPACK_PACKAGING_INSTALL_PREFIX

CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION
CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION

在版本 3.3 中新增。

從重新定位路徑列表中移除預設安裝前綴。

強制性:

預設值:

CPACK_PACKAGING_INSTALL_PREFIXCPACK_RPM_<COMPONENT>_PACKAGE_PREFIX 被視為重新定位路徑之一

可用於從可重定位的 RPM 前綴路徑中移除 CPACK_PACKAGING_INSTALL_PREFIXCPACK_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.7 中新增。

除錯資訊封包包含用於除錯已封裝二進制檔案的除錯符號和原始碼。

除錯資訊 RPM 封裝有其自己的一組變數

CPACK_RPM_DEBUGINFO_PACKAGE
CPACK_RPM_<component>_DEBUGINFO_PACKAGE

啟用產生除錯資訊 RPM 封包。

強制性:

預設值:

OFF

注意

二進制檔案在封裝之前必須包含除錯符號,因此對於 CMAKE_BUILD_TYPE 變數值,請使用 DebugRelWithDebInfo

此外,如果設定了 CPACK_STRIP_FILES,則檔案將在進入 RPM 產生器之前被去除符號,因此將不包含除錯符號,並且不會建置除錯資訊封包。請勿與 CPACK_STRIP_FILES 一起使用。

注意

從沒有二進制檔案、有二進制檔案但沒有執行權限或沒有除錯符號的封包產生的封包將導致封裝終止。

CPACK_BUILD_SOURCE_DIRS

提供從中建置二進制檔案的原始碼檔案根目錄的位置。

強制性:

如果設定了 CPACK_RPM_DEBUGINFO_PACKAGE,則為是

預設值:

注意

對於 CMake 專案,預設情況下,CPACK_BUILD_SOURCE_DIRS 設定為指向 CMAKE_SOURCE_DIRCMAKE_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_BUILD_PARAMS

提供給 cmake(1) 可執行檔的其他命令列參數。

強制性:

預設值:

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.*")