打包

打包

当想要把程序给他人使用时,需要用到打包功能,我们将构建一个安装包,在顶层CMakeLists末尾添加如下信息:

1
2
3
4
5
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)

include(InstallRequiredSystemLibraries)的作用是包含程序在当前系统用到的一些库

接下来是设置一些包的信息,比如LICENSE和版本号

include(CPack)就是引入打包功能

在构建完成后可以执行以下命令进行打包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ cpack
CPack: Create package using STGZ
CPack: Install projects
CPack: - Run preinstall target for: tutorial
CPack: - Install project: tutorial
CPack: Create package
CPack: - package: /home/carl/test/cmake/build/tutorial-..1-Linux.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: /home/carl/test/cmake/build/tutorial-..1-Linux.tar.gz generated.
CPack: Create package using TZ
CPack: Install projects
CPack: - Run preinstall target for: tutorial
CPack: - Install project: tutorial
CPack: Create package
CPack: - package: /home/carl/test/cmake/build/tutorial-..1-Linux.tar.Z generated.

如果需要指定压缩工具,可以使用-G选项

1
2
3
4
5
6
7
$ cpack -G ZIP
CPack: Create package using ZIP
CPack: Install projects
CPack: - Run preinstall target for: tutorial
CPack: - Install project: tutorial
CPack: Create package
CPack: - package: /home/carl/test/cmake/build/tutorial-..1-Linux.zip generated.

如果想要包含源码需要如下配置:

1
2
3
4
5
6
$ cpack -G ZIP --config CPackSourceConfig.cmake
CPack: Create package using ZIP
CPack: Install projects
CPack: - Install directory: /home/carl/test/cmake
CPack: Create package
CPack: - package: /home/carl/test/cmake/build/tutorial-..1-Source.zip generated.

注意:在构建源码包时,如果构建目录在代码目录里,就如我一样,会将编译目录也打包进去,所以应该在代码目录之外建立编译目录,这是个坑,现在亲自踩了下

结语

CMake的基础教程到此就结束了,基本的编译和测试都已经介绍完成,官方文档的内容不止于此,其最后一章的打包调试和发布,也是挺有用的,后面用到再进行学习


打包
https://carl-5535.github.io/2021/08/11/CMake/打包/
作者
Carl Chen
发布于
2021年8月11日
许可协议