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

13,703 阅读3分钟

【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
...

当然我们也可以自己编写这两个文件定制我们生成文件的规则,不过我估计只有闲的蛋疼的人才会自己编写者两个东西。

基本的使用教程已完毕,就是这么官方,就是这么坑爹。没有讲如何加入忽略打包的文件,没有讲解如何定制打包生成的文件名称,没有讲解如何制定打包生成的压缩包的位置,没有讲解生成压缩包的类型如何指定。就是这么官方,就是这么坑爹。后边教程我来填一些坑。