久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行CPack的入門

160次閱讀
沒有評論

共計 5199 個字符,預計需要花費 13 分鐘才能閱讀完成。

本篇文章給大家分享的是有關如何進行 CPack 的入門,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

背景

CPack 是 CMake 2.4.2 之后的一個內置工具,用于創建軟件的二進制包和源代碼包。

CPack 在整個 CMake 工具鏈的位置。

CPack 支持打包的包格式有以下種類:

7Z (7-Zip file format)

DEB (Debian packages)

External (CPack External packages)

IFW (Qt Installer Framework)

NSIS (Null Soft Installer)

NSIS64 (Null Soft Installer (64-bit))

NuGet (NuGet packages)

RPM (RPM packages)

STGZ (Self extracting Tar GZip compression

TBZ2 (Tar GZip compression)

TXZ (Tar XZ compression)

TZ (Tar Compress compression)

ZIP (ZIP file format)

為什么要用打包工具

軟件程序想要在生產環境快速被使用,就需要一個一鍵安裝的安裝包,這樣生產環境就可以很方便的部署和使用。

選擇 CPack 的原因

C++ 工程大部分都是用 CMake 配置編譯,而 CPack 是 CMake 內置的工具,支持打包成多種格式的安裝包。因為是 CMake 的內置工具,所以使用的方式也是通過在 CMakeLists.txt 配置參數,就能達到我們的需求。使用起來很方便,容易上手。

如何安裝 CPack

安裝 CMake 的時候會把 CPack 一起安裝了,直接通過 yum 或者 apt-get 安裝即可。

一個簡單的例子基礎配置

這里介紹如何打包 rpm 包,deb 的打包是一樣的,區別在于一些配置。Cpack 打包 rpm 用的是 CPack RPM 生成器,用到的配置變量是以 CPACK_RPM_XXX 為前綴。最終通過
rpm-build 這個工具去打包,所以需要安裝
rpm-build 這個工具,可以通過  sudo yum install -y rpm-build 安裝。下面配置是用 3.14.5 的 CMake 進行測試的。

現在有一個工程 example,其目錄結構如下:

example
 |-- CMakeLists.txt // example  的主  CMakeLists.txt  文件
 |-- Readme.txt 
 |-- License.txt 
 |-- src
 | |-- CMakeLists.txt
 | |-- MainA.cpp //  可執行文件  Aprogram  的源碼
 | |__ MainB.cpp //  可執行文件  Bprogram  的源碼
 |
 |-- etc
 | |-- CMakeLists.txt
 | |-- A.conf //  可執行文件  Aprogram  的配置文件
 | |__ B.conf //  可執行文件  Bprogram  的配置文件
 |
 |__ scripts
 |-- preinst //  安裝前執行的腳本
 |-- postinst //  安裝后執行的腳本
 |-- prerm //  卸載前執行的腳本
 |__ postrm //  卸載后執行的腳本 

只需要在 example/CMakeLists.txt 文件里面添加如下配置

#  設置生成的安裝包名字
set(CPACK_PACKAGE_NAME  example)
#  設置支持指定安裝目錄的控制為  ON 
set(CPACK_SET_DESTDIR ON)
#  設置安裝到的目錄路徑
set(CPACK_INSTALL_PREFIX  /home/vesoft/install) 
#  這是生成的安裝的版本號信息  
set(CPACK_PACKAGE_VERSION  1.0.0) 
#  設置  group  名字  
set(CPACK_RPM_PACKAGE_GROUP  vesoft) 
#  設置  vendor  名字  
set(CPACK_PACKAGE_VENDOR  vesoft) 
#  設置  license  信息  
set(CPACK_RPM_PACKAGE_LICENSE  Apache 2.0 + Common Clause 1.0)
include(CPack)

執行 cmake 命令后, 你會發現當前目錄下面多了兩個文件
CPackConfig.cmake 和 CPackSourceConfig.cmake。編譯完成后,執行
cpack -G RPM 就可將文件打包成 rpm 包,當前目錄下會生成一個
_CPack_Packages 目錄和一個以 .rpm 為后綴名的文件
example-1.0.0-Linux.rpm,example-1.0.0-Linux.rpm 就是我們想要的安裝包文件。

如果想要查看打包過程的詳細輸出,可以在命令后面添加
–verbose。CPack 是根據用戶的配置生成_CPack_Packages/Linux/RPM/SPECS/example.spec 文件,然后讓 rpm-build 用。

上面配置生成的安裝包
example-1.0.0-Linux.rpm 里面包含的文件如下:

??注意:假如安裝時出現
file /home from install of example-1.0.0-1.x86_64 conflicts with file from package filesystem-3.2-25.el7.x86_64,那么需要在配置文件里面添加以下配置,讓生成的 rpm 文件不包含 /home 和 /home/vesoft。

set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION  /home)
list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION  /home/vesoft)

添加行為

我們要在安裝前后、卸載前后做一些事情時,可以通過寫相應的腳本文件:

preinst:安裝前腳本文件

postinst:安裝后腳本文件

prerm:卸載前文件

postrm:卸載后文件

在上述的 CMakeLists.txt 文件里面添加如下配置:

#  設置安裝前執行的腳本文件  preinst
set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/preinst)
#  設置卸載前執行的腳本文件  prerm
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/prerm)
#  設置安裝后執行的腳本文件  postinst
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/postinst)
#  設置卸載后執行的腳本文件  postrm
set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/postrm)

CPack 會將上面配置的腳本里面的內容寫到生成的 SPEC 文件里面去。

??注意:上述的四個腳本文件需要的權限是所有用戶和用戶組均能執行,創建完腳本文件后,通過
chmod 755 scripts/*   修改 scripts 目錄下面的腳本文件的權限。

執行
sudo rpm -ivh example-1.0.0-Linux.rpm 命令會有以下輸出

執行
sudo rpm -e example-1.0.0 會有以下輸出

可以看到圖片里面綠色和紅色字樣,就是四個腳本文件的打印輸出,分別對應安裝前后和卸載前后執行打印。所以用戶可以在這四個腳本里面實現自己想要的功能。

分裝多個包

上述配置是將所有需要打包的文件打包成一個安裝包,但一個項目往往會有多個不同服務,在實施部署時需安裝到不同的機子上,這個時候如果把所有服務一起打包,會導致部署時包太大。這個時候就需要用上 CPack 的 Components 功能。

下面介紹在這個過程需要用到的三個函數:cpack_add_component 和
cpack_add_component_group,還有
install。

以下為添加
install 的函數定義

以下為添加
component 的函數定義

以下為添加
group 的函數定義

以上述為例,假如我們要將 program A 和它的配置文件 A.conf 打成一個 rpm 包,將 program B 和它的配置文件 B.conf 打成一個 rpm 包,則需要在 CMakeLists.txt 里添加以下內容,把上述配置的 include(CPack) 移到下面配置的位置:

#  設置每個分組打包成一個  rpm  包
set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
#  設置支持  COMPONENT
set(CPACK_RPM_COMPONENT_INSTALL ON)
include(CPack)
#  添加一個名為  AComponent  的  component
cpack_add_component(AComponent
 DISPLAY_NAME  A program 
 DESCRIPTION  The program for test 
 GROUP Aprogram)
#  添加一個名為  BComponent  的  component
cpack_add_component(BComponent
 DISPLAY_NAME  B program 
 DESCRIPTION  The program for test 
 GROUP Bprogram)
#  添加一個名為  Aprogram  的  group,  這個名字會作為  rpm  包名字的一部分
cpack_add_component_group(Aprogram)
#  添加一個名為  Bprogram  的  group
cpack_add_component_group(Bprogram)

然后修改 src/CMakeLists.txt,看下圖紅框內容,將 program A 二進制文件配置為 AComponent,將 program B 二進制文件配置為 BComponent。

修改 etc/CMakeLists.txt,看下圖紅框內容,將配置文件 A.conf 配置為 AComponent,將配置文件 B.conf 配置為 BComponent。

更新 CMakeLists.txt 的配置之后,重新執行下 cmake 命令生成新的 makefile 文件,并執行
cpack -G RPM,你可以在當前目錄下面看到生成兩個文件
example-1.0.0-Linux-Aprogram.rpm 和
example-1.0.0-Linux-Bprogram.rpm, 它們各自包含的文件如下:

其他常用參數

安裝到指定目錄:上述配置,生成的安裝包只能安裝到
/home/vesoft/install 目錄,假如用戶希望能夠安裝指定位置,這個時候需要在
include(CPack) 之前添加以下配置

#  將上述配置設置指定目錄這個選項置為  OFF
set(CPACK_SET_DESTDIR OFF)
#  設置可重定目錄的選擇為  ON
set(CPACK_RPM_PACKAGE_RELOCATABLE ON)
#  設置默認重定的目錄
set(CPACK_PACKAGING_INSTALL_PREFIX  /home/vesoft/install)

通過上述配置,重新生成的 rpm 包就可以支持安裝到其他指定目錄,下面是把它安裝到
/home/test/install,使用如下:

sudo rpm -ivh example-1.0.0-Linux-Aprogram.rpm --prefix=/home/test/install

用戶可以通過
CPACK_RPM_SPEC_MORE_DEFINE 這個參數在生成的 SEPC 文件里面增加相應的宏,來應用 rpmbuild 的一些功能開關。

更多…

CPack 有很多參數,不同版本參數有些差異,想要了解更多,可以去 CMake 官網查看,見
CPack?;蛑苯油ㄟ^
CPack –help 獲取參數描述。

Nebula Graph 也是采用 CPack 進行打包成 rpm 和 deb 包,您可以通過
https://github.com/vesoft-inc/nebula/releases 獲取到
Nebula Graph 每次 release 發布的包。

如何進行 CPack 的入門

以上就是如何進行 CPack 的入門,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-18發表,共計5199字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 卢氏县| 龙海市| 神木县| 张掖市| 叶城县| 镇宁| 定襄县| 朔州市| 陕西省| 东光县| 错那县| 池州市| 肃南| 宜兰市| 永修县| 从江县| 明水县| 云林县| 阿城市| 沾化县| 塔城市| 偏关县| 上犹县| 岳西县| 连州市| 那坡县| 泸州市| 丹棱县| 广宁县| 临湘市| 宜章县| 浦江县| 武城县| 灵石县| 工布江达县| 婺源县| 海伦市| 共和县| 荥经县| 望奎县| 墨玉县|