亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行CPack的入門

發布時間:2021-11-30 09:21:36 來源:億速云 閱讀:214 作者:柒染 欄目:數據庫

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

背景

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

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

如何進行CPack的入門

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.rpmexample-1.0.0-Linux.rpm 就是我們想要的安裝包文件。

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

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

如何進行CPack的入門

??注意:假如安裝時出現 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 命令會有以下輸出

如何進行CPack的入門

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

如何進行CPack的入門

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

分裝多個包

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

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

以下為添加 install 的函數定義

如何進行CPack的入門

以下為添加 component 的函數定義

如何進行CPack的入門

以下為添加 group 的函數定義

如何進行CPack的入門

以上述為例,假如我們要將 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。

如何進行CPack的入門

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

如何進行CPack的入門

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

如何進行CPack的入門

其他常用參數

  • 安裝到指定目錄:上述配置,生成的安裝包只能安裝到 /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的入門,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永平县| 临漳县| 泸州市| 枣强县| 阿克陶县| 屏边| 方城县| 台安县| 攀枝花市| 新蔡县| 牙克石市| 吴旗县| 灌云县| 河北省| 涡阳县| 乌什县| 郸城县| 南华县| 乐亭县| 抚顺县| 安庆市| 蓬溪县| 铜梁县| 南岸区| 田阳县| 唐河县| 桐乡市| 洪洞县| 九龙城区| 林甸县| 于都县| 沛县| 高台县| 沙坪坝区| 界首市| 东光县| 广南县| 长岛县| 方山县| 东阿县| 扎赉特旗|