cmake学习4:如何将自己的工程打包给别人

前言: 自己在使用cmake进行编译工程的时候不太了解cmake的基本使用方法,有时候出现找不到第三方库的问题也不知如何排查,因此相对cmake有个稍微系统的认识,希望能用这个强大的工具来更好的为自己的工程服务,因此总结为了几篇博客,主要参考的是官网的Tutorial,加入了自己的认识,另外,其实cmake本质上是一个工具,工具的作用就是用来帮助我们更好的构建项目的,所以对于工具能够满足使用要求就好,不必细枝末节的完全掌握,如有错误请斧正.

测试cmake版本:3.20.4

测试平台:ubuntu16.04

Tutorial源代码:

系列博客目录:


这一节我们要完成的功能是: 如何把自己编译好的项目给别人用呢? 这个也非常具有实际意义,可以想一下,我们在本地开发了一个项目,也编译出了可执行文件和相关的库文件,如何能让别人快速使用呢? 总不能把整个项目或者把库啥的拷贝过去把,那样太麻烦了, 为了让其他人快速的使用我们的项目,我们需要将自己的项目打包成一个安装包,其他人拿到安装包之后就能快速安装使用!

打包文件使用的cmake自带的打包工具cpack,他可以将我们指定的文件打包成多种格式: .sh, .tar.gz, deb等等,这里只展示如何打包成deb文件. 其实deb文件在Linux系统下并不陌生,是非常常见的软件安装包格式,下面就看一下如何将项目中指定的文件打包成deb安装包. 强调指定的文件的原因是有的项目包含多个可执行文件,而我们只需要其中的一个,所以不必全部打包.

使用cpack打包成deb只需要两步:

设置deb包的属性

在CMakeLists.txt文件中加入如下代码:

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}")
set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGE_NAME "tutorial_step4")
set(CPACK_PACKAGE_CONTACT "freddy0705@163.com")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "freddy0705@163.com")
include(CPack)

set命令用来设置deb包的属性:

CPACK_RESOURCE_FILE_LICENSE : 源文件的license

CPACK_PACKAGE_VERSION_MAJOR CPACK_PACKAGE_VERSION_MINOR: 版本号

CPACK_GENERATOR : 安装包的类型

CPACK_PACKAGE_NAME : 生成的安装包的名字

CPACK_PACKAGE_CONTACT : 安装包的联系人

CPACK_DEBIAN_PACKAGE_MAINTAINER : 安装包的维护人

最后使用include把CPack这个工具包含进去

选择打包的文件及位置

这个需要使用install命令, 只不过需要注意的一点是: 如果使用的是相对路径,那么其默认的前缀路径是/usr/..., 而不是本地安装的/usr/local/... , 对于通过add_subdirectory里面的CMakeLists.txt也是符合的,按照Tutorial, 在MathFunctions/CMakeLitst.txt中install代码是:

install(TARGETS MathFunctions DESTINATION lib)
install(FILES MathFunctions.h DESTINATION include)

在CMakeLitsts.txt中install命令是(加了fuzhong前缀是为了比较):

install(TARGETS Tutorial DESTINATION fuzhong/bin)
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  DESTINATION fuzhong/include
  )

测试

执行如下命令

mkdir build_Step4
cd build_Step4
cmake ../Step4
make package

可以发现在build_Step4路径下生成.deb文件:

通过dpkg命令查看.deb文件信息可以看到需要安装的文件和安装的路径:

然后将此.deb文件发给其他人,使用下面命令就可以安装了

sudo dpkg -i tutorial_step4-1.0-Linux.deb
经验分享 程序员 微信小程序 职场和发展