cmake使用教程(五)-cpack生成安裝包

saka發表於2018-02-01

【cmake系列使用教程】

cmake使用教程(一)-起步

cmake使用教程(二)-新增庫

cmake使用教程(三)-安裝、測試、系統自檢

cmake使用教程(四)-檔案生成器

cmake使用教程(五)-cpack生成安裝包

cmake使用教程(六)-蛋疼的語法

cmake使用教程(七)-流程和迴圈

cmake使用教程(八)-macro和function

這個系列的文章翻譯自官方cmake教程:cmake tutorial

示例程式地址:github.com/rangaofei/t…

不會僅僅停留在官方教程。本人作為一個安卓開發者,實在是沒有linux c程式開發經驗,望大佬們海涵。教程是在macos下完成,大部分linux我也測試過,有特殊說明的我會標註出來。本教程基於cmake-3.10.2,同時認為你已經安裝好cmake。

假如想將我們的專案分發給其他人,以便他們可以安裝並使用它。我們希望在各種平臺上提供可執行檔案或者原始檔,構建支援二進位制安裝和包管理特性的安裝包,如cygwin、debian、rpm等。為了實現這一點,我們將使用CPack來建立與CPack在章節包裝中描述的平臺特定安裝程式。具體來說,我們需要在根目錄CMakeLists.txt的底部新增幾行程式碼:

# build a CPack driven installer package
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE  
     "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "${Tutorial_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${Tutorial_VERSION_MINOR}")
include (CPack)
複製程式碼

首先要加入InstallRequiredSystemLibraries。這個模組將包括當前平臺專案所需要的任何執行時庫。接下來,我們將一些CPack變數,如該專案的許可和版本資訊。最後,我們將加入CPack模組,它將使用剛才定義的變數變數和系統的一些其他屬性來設定安裝程式。 我們執行外部構建並檢視生成的檔案都有什麼:

 ~/Desktop/Tutorial/Step6/build/ tree -L 1
.
├── CMakeCache.txt
├── CMakeFiles
├── CPackConfig.cmake
├── CPackSourceConfig.cmake
├── CTestTestfile.cmake
├── Makefile
├── MathFunctions
├── TutorialConfig.h
└── cmake_install.cmake
複製程式碼

注意其中兩個生成的檔案CPackConfig.cmake,CPackSourceConfig.cmake,一會又大用處。

下一步是按照一般的方式構建專案,然後在其上執行CPack。要構建一個二進位制版本,可以執行:

cpack --config CPackConfig.cmake
複製程式碼

下邊是日誌:

CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: Tutorial
CPack: - Install project: Tutorial
CPack: Create package
CPack: - package: /Users/saka/Desktop/Tutorial/Step6/build/Tutorial-1.0.1-Darwin.sh generated.
CPack: Create package using TGZ
CPack: Install projects
CPack: - Run preinstall target for: Tutorial
CPack: - Install project: Tutorial
CPack: Create package
CPack: - package: /Users/saka/Desktop/Tutorial/Step6/build/Tutorial-1.0.1-Darwin.tar.gz generated.
複製程式碼

從日誌可以看到生成了兩個打包的檔案Tutorial-1.0.1-Darwin.sh,Tutorial-1.0.1-Darwin.tar.gz。檢視一下目錄:

 ~/Desktop/Tutorial/Step6/build/ tree -L 1
.
├── CMakeCache.txt
├── CMakeFiles
├── CPackConfig.cmake
├── CPackSourceConfig.cmake
├── CTestTestfile.cmake
├── Makefile
├── MathFunctions
├── Tutorial
├── Tutorial-1.0.1-Darwin.sh
├── Tutorial-1.0.1-Darwin.tar.gz
├── TutorialConfig.h
├── _CPack_Packages
├── cmake_install.cmake
└── install_manifest.txt
複製程式碼

檢視一下壓縮包內的檔案:

 ~/Desktop/Tutorial/Step6/build/ tar -tf Tutorial-1.0.1-Darwin.tar.gz 
Tutorial-1.0.1-Darwin/bin/
Tutorial-1.0.1-Darwin/bin/Tutorial
Tutorial-1.0.1-Darwin/bin/libMathFunctions.a
Tutorial-1.0.1-Darwin/include/
Tutorial-1.0.1-Darwin/include/MathFunctions.h
Tutorial-1.0.1-Darwin/include/TutorialConfig.h
複製程式碼

這個是已經編譯好的問答壓縮而成的,解壓後可以直接執行。

要構建一個原始碼版本,可以執行:

cpack --config CPackSourceConfig.cmake
複製程式碼

日誌輸出基本同上,只是包內的檔案不一樣:

 ~/Desktop/Tutorial/Step6/build/ tar -tf Tutorial-1.0.1-Source.tar.gz 
Tutorial-1.0.1-Source/CMakeLists.txt
Tutorial-1.0.1-Source/TutorialConfig.h.in
Tutorial-1.0.1-Source/tutorial.cxx
Tutorial-1.0.1-Source/MathFunctions/
Tutorial-1.0.1-Source/MathFunctions/MakeTable.cxx
Tutorial-1.0.1-Source/MathFunctions/mysqrt.cxx
Tutorial-1.0.1-Source/MathFunctions/CMakeLists.txt
...
複製程式碼

當然我們也可以自己編寫這兩個檔案定製我們生成檔案的規則,不過我估計只有閒的蛋疼的人才會自己編寫者兩個東西。

基本的使用教程已完畢,就是這麼官方,就是這麼坑爹。沒有講如何加入忽略打包的檔案,沒有講解如何定製打包生成的檔名稱,沒有講解如何制定打包生成的壓縮包的位置,沒有講解生成壓縮包的型別如何指定。就是這麼官方,就是這麼坑爹。後邊教程我來填一些坑。

相關文章