CPack¶
為二進制安裝程式和原始碼套件設定產生器。
簡介¶
CPack 模組會產生設定檔 CPackConfig.cmake
和 CPackSourceConfig.cmake
。它們旨在用於後續執行 cpack
程式,其中它們會引導產生安裝程式或/和原始碼套件。
根據 CMake 產生器,CPack 模組也可能會新增兩個新的建置目標,package
和 package_source
。請參閱下方的封裝目標章節以取得詳細資訊。
產生的二進制安裝程式將包含所有已透過 CMake 的 install()
命令(以及已棄用的命令 install_files()
、install_programs()
和 install_targets()
)安裝的所有檔案。請注意,install()
命令的 DESTINATION
選項必須是相對路徑;否則 CPack 將會忽略安裝的檔案。
某些類型的二進制安裝程式可以設定為讓使用者可以選擇要安裝的個別應用程式組件。請參閱 CPackComponent
模組以取得更多詳細資訊。
原始碼套件(透過 CPackSourceConfig.cmake
設定,並由 CPack Archive Generator
產生)將包含專案目錄中的所有原始碼檔案,但 CPACK_SOURCE_IGNORE_FILES
中指定的檔案除外。
CPack 產生器¶
CPACK_GENERATOR
變數在不同的內容中有不同的含義。在 CMakeLists.txt
檔案中,CPACK_GENERATOR
是產生器清單:當 cpack
在沒有其他引數的情況下執行時,它將會迭代該清單,並為每個產生器產生一個套件。在 CPACK_PROJECT_CONFIG_FILE
中,CPACK_GENERATOR
是命名單一產生器的字串。如果您需要每個 cpack 產生器邏輯來控制其他 cpack 設定,則您需要 CPACK_PROJECT_CONFIG_FILE
。如果設定,則會自動包含每個產生器的 CPACK_PROJECT_CONFIG_FILE
。它只需要包含覆寫。
以下是它的運作方式
cpack
執行它包含
CPackConfig.cmake
它會迭代
-G
命令列選項所指定的產生器,或者,如果未指定此選項,則會迭代CPackConfig.cmake
輸入檔案中設定的CPACK_GENERATOR
變數所指定的產生器清單。foreach 產生器,然後
將
CPACK_GENERATOR
設定為目前正在迭代的產生器為該產生器產生套件
這是關鍵:對於 CPackConfig.cmake
中 CPACK_GENERATOR
中列出的每個產生器,cpack 將在內部重設 CPACK_GENERATOR
為目前正在使用的產生器,然後包含 CPACK_PROJECT_CONFIG_FILE
。
如需可用產生器的清單,請參閱 cpack-generators(7)
。
目標 package 和 package_source¶
如果使用 Makefile、Ninja 或 Xcode 產生器執行 CMake,則 include(CPack)
會產生目標 package
。這使得可以從 CMake、Make 或 Ninja 建置二進制安裝程式:而不是 cpack
,可以呼叫 cmake --build . --target package
或 make package
或 ninja package
。VS 產生器會建立大寫目標 PACKAGE
。
如果使用 Makefile 或 Ninja 產生器執行 CMake,則 include(CPack)
也會產生目標 package_source
。若要建置原始碼套件,而不是 cpack -G TGZ --config CPackSourceConfig.cmake
,可以呼叫 cmake --build . --target package_source
、make package_source
或 ninja package_source
。
所有 CPack 產生器通用的變數¶
在您的 CMakeLists.txt
檔案中包含此 CPack 模組之前,可以設定各種變數來自訂產生的安裝程式。最常用的變數是
- CPACK_PACKAGE_NAME¶
套件(或應用程式)的名稱。如果未指定,則預設為專案名稱。
- CPACK_PACKAGE_VENDOR¶
套件供應商的名稱。(例如,「Kitware」)。預設值為「Humanity」。
- CPACK_PACKAGE_DIRECTORY¶
CPack 在其中進行封裝的目錄。如果未設定,則此值會預設為(在內部)建置目錄。此變數可以在 CPack 設定檔中定義,或從
cpack
命令列選項-B
中定義。如果設定,則命令列選項會覆寫設定檔中的值。
- CPACK_PACKAGE_VERSION_MAJOR¶
套件主要版本。此變數將始終設定,但其預設值取決於是否在頂層 CMakeLists.txt 檔案中的
project()
命令中給定版本詳細資訊。如果給定版本詳細資訊,則預設值為CMAKE_PROJECT_VERSION_MAJOR
。如果未給定任何版本詳細資訊,則會假設預設版本為 0.1.1,這會導致CPACK_PACKAGE_VERSION_MAJOR
的預設值為 0。
- CPACK_PACKAGE_VERSION_MINOR¶
套件次要版本。預設值會根據是否在頂層 CMakeLists.txt 檔案中的
project()
命令中提供了版本詳細資訊而定。如果提供了版本詳細資訊,預設值將會是CMAKE_PROJECT_VERSION_MINOR
,但如果沒有指定次要版本元件,則會保持CPACK_PACKAGE_VERSION_MINOR
未設定。如果完全沒有提供專案版本,則會假設預設版本為 0.1.1,導致CPACK_PACKAGE_VERSION_MINOR
的預設值為 1。
- CPACK_PACKAGE_VERSION_PATCH¶
套件修補程式版本。預設值會根據是否在頂層 CMakeLists.txt 檔案中的
project()
命令中提供了版本詳細資訊而定。如果提供了版本詳細資訊,預設值將會是CMAKE_PROJECT_VERSION_PATCH
,但如果沒有指定修補程式版本元件,則會保持CPACK_PACKAGE_VERSION_PATCH
未設定。如果完全沒有提供專案版本,則會假設預設版本為 0.1.1,導致CPACK_PACKAGE_VERSION_PATCH
的預設值為 1。
- CPACK_PACKAGE_DESCRIPTION¶
專案的描述,用於 CPack 產生的 Windows 安裝程式的歡迎畫面等位置。如果未設定,此變數的值會從名為
CPACK_PACKAGE_DESCRIPTION_FILE
的檔案中填入。
- CPACK_PACKAGE_DESCRIPTION_FILE¶
當
CPACK_PACKAGE_DESCRIPTION
未明確設定時,用於描述專案的文字檔案。CPACK_PACKAGE_DESCRIPTION_FILE
的預設值指向內建的範本檔案Templates/CPack.GenericDescription.txt
。
- CPACK_PACKAGE_DESCRIPTION_SUMMARY¶
專案的簡短描述 (只有幾個字)。如果設定了
CMAKE_PROJECT_DESCRIPTION
變數,則會用作預設值,否則預設值將是 CMake 基於CMAKE_PROJECT_NAME
所產生的字串。
- CPACK_PACKAGE_HOMEPAGE_URL¶
專案首頁 URL。預設值取自
CMAKE_PROJECT_HOMEPAGE_URL
變數,該變數由頂層project()
命令設定,否則如果沒有提供 URL 給project()
,則預設值將為空。
- CPACK_PACKAGE_FILE_NAME¶
要產生的套件檔案名稱,不包括副檔名。例如,
cmake-2.6.1-Linux-i686
。預設值為${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}
- CPACK_PACKAGE_INSTALL_DIRECTORY¶
目標系統上的安裝目錄。某些 CPack 產生器 (例如 NSIS) 可以使用此目錄來建立安裝目錄,例如安裝前置詞下的 "CMake 2.5"。所有已安裝的元素都將放在此目錄內。
- CPACK_PACKAGE_ICON¶
將顯示在安裝程式內的品牌形象 (由 GUI 安裝程式使用)。
- CPACK_PACKAGE_CHECKSUM¶
在版本 3.7 中新增。
將用於產生包含套件檢查碼的額外檔案的演算法。輸出檔案名稱將會是
${CPACK_PACKAGE_FILE_NAME}.${CPACK_PACKAGE_CHECKSUM}
支援的演算法是 string(<HASH>) 命令列出的演算法。
- CPACK_PROJECT_CONFIG_FILE¶
CPack 時間專案 CPack 設定檔。此檔案在 CPack 設定
CPACK_GENERATOR
為正在使用的實際產生器後,在每個產生器執行一次 CPack 時包含。它允許在 CPack 時間對每個產生器設定CPACK_*
變數。
- CPACK_RESOURCE_FILE_LICENSE¶
要嵌入到安裝程式中的許可證。它通常會在安裝前由產生的安裝程式向使用者顯示 (對於圖形安裝程式,通常會帶有明確的 "接受" 按鈕)。此許可證檔案不會新增到已安裝的檔案,但會由某些 CPack 產生器 (例如 NSIS) 使用。如果您想要使用 UTF-8 字元,則檔案必須以 UTF-8 BOM 編碼。如果您想要將許可證檔案 (可能與此相同) 與您的專案一起安裝,則必須在您的
CMakeLists.txt
中新增適當的 CMakeinstall()
命令。
- CPACK_RESOURCE_FILE_README¶
要嵌入到安裝程式中的 ReadMe 檔案。它通常會詳細描述安裝期間專案的用途。並非所有 CPack 產生器都使用此檔案。
- CPACK_RESOURCE_FILE_WELCOME¶
要嵌入到安裝程式中的歡迎檔案。它歡迎使用者使用此安裝程式。通常用於 Windows 和 Mac OS X 上的圖形安裝程式。
- CPACK_MONOLITHIC_INSTALL¶
停用基於元件的安裝機制。設定後,將忽略元件規格,所有已安裝的項目都將放在單一 "MONOLITHIC" 套件中。某些 CPack 產生器預設執行單一封裝,並且可以透過將
CPACK_<GENNAME>_COMPONENT_INSTALL
設定為TRUE
來要求執行元件封裝。
- CPACK_GENERATOR¶
要使用的 CPack 產生器清單。如果未指定,CPack 將會建立一組遵循命名模式
CPACK_BINARY_<GENNAME>
(例如CPACK_BINARY_NSIS
) 的選項,允許使用者啟用/停用個別產生器。如果在cpack
命令列上給定了-G
選項,它將覆蓋此變數和任何CPACK_BINARY_<GENNAME>
選項。
- CPACK_OUTPUT_CONFIG_FILE¶
CPack 二進位設定檔的名稱。此檔案是由 CPack 模組為二進位安裝程式產生的 CPack 設定。預設為
CPackConfig.cmake
。
- CPACK_PACKAGE_EXECUTABLES¶
列出每個可執行檔和相關聯的文字標籤,用於建立「開始」功能表捷徑。例如,將其設定為清單
ccmake;CMake
將建立一個名為 "CMake" 的捷徑,該捷徑將執行已安裝的可執行檔 ccmake。並非所有 CPack 產生器都使用它 (至少 NSIS、Inno Setup 和 WIX 會)。
- CPACK_STRIP_FILES¶
要剝離的檔案清單。從 CMake 2.6.0 開始,
CPACK_STRIP_FILES
將是一個布林變數,它啟用所有檔案的剝離 (CMake 中檔案清單的計算結果為TRUE
,因此此變更相容)。
- CPACK_VERBATIM_VARIABLES¶
在版本 3.4 中新增。
如果設定為
TRUE
,則前綴為CPACK_
的變數值在寫入組態檔之前會被跳脫,以確保 cpack 程式接收到的值與指定的值完全相同。否則,像是引號和反斜線之類的字元可能會導致解析錯誤,或是改變 cpack 程式接收到的值。為了保持向後相容性,預設值為FALSE
。
- CPACK_THREADS¶
在 3.20 版本中新增。
執行平行化操作時使用的執行緒數量,例如壓縮安裝程式套件。
CPack 產生器(例如 Debian 或 Archive)使用的一些壓縮方法可以利用多個 CPU 核心來加速壓縮。
CPACK_THREADS
可以設定要用於壓縮的執行緒數量。可以使用正整數來指定確切的所需執行緒計數。
當給定負整數時,CPack 會使用絕對值作為上限,但可能會根據可用的硬體並行性選擇較低的值。
給定 0 時,CPack 將嘗試使用所有可用的 CPU 核心。
預設情況下,
CPACK_THREADS
設定為1
。以下壓縮方法可能會利用多個核心
xz
如果 CMake 是使用支援平行壓縮的
liblzma
建置的,則支援此功能。在 3.21 版本中新增:
cmake.org
上提供的官方 CMake 二進位檔現在附帶支援平行壓縮的liblzma
。較舊的版本則沒有。zstd
在 3.24 版本中新增。
如果 CMake 是使用 libarchive 3.6 或更高版本建置的,則支援此功能。
cmake.org
上提供的官方 CMake 二進位檔支援此功能。
其他壓縮方法會忽略此值,並且僅使用一個執行緒。
原始碼套件產生器的變數¶
以下 CPack 變數專用於原始碼套件,不會影響二進位套件
- CPACK_SOURCE_PACKAGE_FILE_NAME¶
原始碼套件的名稱。例如
cmake-2.6.1
。
- CPACK_SOURCE_STRIP_FILES¶
原始碼樹中將被剝除的檔案清單。從 CMake 2.6.0 開始,
CPACK_SOURCE_STRIP_FILES
將會是一個布林變數,用於啟用剝除所有檔案(檔案清單在 CMake 中會評估為TRUE
,因此此變更是相容的)。
- CPACK_SOURCE_GENERATOR¶
用於原始碼套件的產生器清單。與
CPACK_GENERATOR
一樣,如果未指定,則 CPack 將會建立一組選項(例如CPACK_SOURCE_ZIP
),允許使用者選擇要產生的套件。
- CPACK_SOURCE_OUTPUT_CONFIG_FILE¶
CPack 原始碼組態檔的名稱。此檔案是由 CPack 模組針對原始碼安裝程式產生的 CPack 組態。預設值為
CPackSourceConfig.cmake
。
- CPACK_SOURCE_IGNORE_FILES¶
在建置原始碼套件時,原始碼樹中不會被打包的檔案模式。這是一個正規表示式模式的清單(必須正確跳脫),例如
/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*
進階使用的變數¶
以下變數用於 CPack 的進階使用
- CPACK_CMAKE_GENERATOR¶
如果專案是 CMake 專案,應該使用哪個 CMake 產生器。預設值為
CMAKE_GENERATOR
的值。很少有使用者會想要變更此設定。
- CPACK_INSTALL_CMAKE_PROJECTS¶
指定要安裝哪個專案的四個值清單。這四個值分別是:建置目錄、專案名稱、專案元件、目錄。如果省略,CPack 將會建置一個安裝所有內容的安裝程式。
- CPACK_SYSTEM_NAME¶
系統名稱,預設值為
CMAKE_SYSTEM_NAME
的值,但在 Windows 上會是win32
或win64
。
- CPACK_PACKAGE_VERSION¶
套件完整版本,在內部使用。預設情況下,這是從
CPACK_PACKAGE_VERSION_MAJOR
、CPACK_PACKAGE_VERSION_MINOR
和CPACK_PACKAGE_VERSION_PATCH
建置的。
- CPACK_TOPLEVEL_TAG¶
已安裝檔案的目錄。
- CPACK_INSTALL_COMMANDS¶
安裝元件的額外命令。在執行期間,環境變數
CMAKE_INSTALL_PREFIX
會設定為暫時安裝目錄。
- CPACK_INSTALL_SCRIPTS¶
在 3.16 版本中新增。
CPack 在其本機暫存安裝期間執行的額外 CMake 腳本。它們會在安裝要打包的檔案之前執行。這些腳本不會由獨立安裝程式(例如:
make install
)呼叫。對於每個腳本,將會設定以下變數:CMAKE_CURRENT_SOURCE_DIR
、CMAKE_CURRENT_BINARY_DIR
和CMAKE_INSTALL_PREFIX
(設定為暫存安裝目錄)。單數形式CMAKE_INSTALL_SCRIPT
作為替代變數出於歷史原因而受到支援,但是如果設定了CMAKE_INSTALL_SCRIPTS
,則其值會被忽略,並會發出警告。另請參閱
CPACK_PRE_BUILD_SCRIPTS
和CPACK_POST_BUILD_SCRIPTS
,可用於指定要在封裝過程中稍後執行的腳本。
- CPACK_PRE_BUILD_SCRIPTS¶
在 3.19 版本中新增。
CPack 將要打包的檔案安裝到暫存目錄後,以及從這些檔案產生套件之前要執行的 CMake 腳本清單。另請參閱
CPACK_INSTALL_SCRIPTS
和CPACK_POST_BUILD_SCRIPTS
。
- CPACK_POST_BUILD_SCRIPTS¶
在 3.19 版本中新增。
在 CPack 產生最終的套件,並將它們複製回建置目錄之前,要執行的 CMake 指令碼列表。另請參閱
CPACK_INSTALL_SCRIPTS
、CPACK_PRE_BUILD_SCRIPTS
和CPACK_PACKAGE_FILES
。
- CPACK_PACKAGE_FILES¶
在 3.19 版本中新增。
在暫存目錄中建立的套件檔案列表,每個檔案都以完整的絕對路徑提供。此變數由 CPack 在調用
CPACK_POST_BUILD_SCRIPTS
中列出的建置後指令碼之前填入。這是建置後指令碼了解要操作的套件檔案集的首選方式。專案不應嘗試自行設定此變數。
- CPACK_INSTALLED_DIRECTORIES¶
要安裝的額外目錄。
- CPACK_PACKAGE_INSTALL_REGISTRY_KEY¶
安裝此專案時使用的登錄機碼。這僅由 Windows 的安裝程式使用。預設值基於安裝目錄。
- CPACK_CREATE_DESKTOP_LINKS¶
要建立的桌面連結列表。每個桌面連結都需要一個對應的開始功能表快捷方式,如
CPACK_PACKAGE_EXECUTABLES
所建立。
- CPACK_BINARY_<GENNAME>¶
二進位產生器的 CPack 產生選項。
CPack.cmake
模組會產生 (當CPACK_GENERATOR
未設定時) 一組 CMake 選項 (請參閱 CMakeoption()
命令),然後可用於選取建置package
目標時或在不使用-G
選項的情況下執行cpack
時要使用的 CPack 產生器。
- CPACK_READELF_EXECUTABLE¶
新增於 3.25 版本。
指定 CPack 使用的
readelf
可執行檔路徑。預設值將取自CMAKE_READELF
變數 (如果已設定),該變數可能由內部 CMake 模組填入。如果未設定CMAKE_READELF
,CPack 將在需要時使用find_program()
來確定readelf
路徑。
- CPACK_OBJCOPY_EXECUTABLE¶
新增於 3.25 版本。
指定 CPack 使用的
objcopy
可執行檔路徑。預設值將取自CMAKE_OBJCOPY
變數 (如果已設定),該變數可能由內部 CMake 模組填入。如果未設定CMAKE_OBJCOPY
,CPack 將在需要時使用find_program()
來確定objcopy
路徑。
- CPACK_OBJDUMP_EXECUTABLE¶
新增於 3.25 版本。
指定 CPack 使用的
objdump
可執行檔路徑。預設值將取自CMAKE_OBJDUMP
變數 (如果已設定),該變數可能由內部 CMake 模組填入。如果未設定CMAKE_OBJDUMP
,CPack 將在需要時使用find_program()
來確定objdump
路徑。