【cmake系列使用教程】
在前边的文章中已经讲过了如何使用cpack,但是那只是一个官方的简版教程,这次讲解的是我在实际开发Linux c中遇到的一些cpakc的问题。
简介
CPack是作为一个模块出现在cmake构建系统中的,它是一个非常强大的打包工具,可以用来打包二进制文件或者源码。打包好的二进制文件中包含了所有的cmake install命令需要的安装文件。在打包源码时,也可以生成对应的压缩包。 cpack可以依赖cmake构建生成的config文件,也可以自己编写配置文件。我属于比较懒的类型,直接使用cmake生成的config文件吧。generator是一个比较重要的东西,它算是你要生成的打包文件的类型,cpack默认提供了一个列表来指定这个东西。
主要工作流程:
- cpack执行
- 寻找CPackConfig.cmake文件
- 遍历命令行 -G传入的generator参数,假如没有传入参数,则检查CPackConfig.cmake文件或者CPackSourceConfig.cmake文件中的CPAKC_GENERATOR变量,注意这个优先级的问题,命令行参数会覆盖配置文件的参数。
- 为每一个generator来生成对应的打包文件
流程就是如此简单。
具体配置
这里以我自己的一个开源项目为例子来讲解--Sweather,这是个c语言的获取天气的命令行工具。地址: github.com/rangaofei/S…
首先看一下工程目录结构:
.
├── CMakeLists.txt
├── License.txt
├── PIC
├── README.md
├── assets
├── build
├── cmake-build-debug
├── logfile
├── pack
├── sakabrew.sh
└── src
复制代码
- CMakeLists.txt是cmake执行的入口文件
- License.txt是协议信息
- PIC是我自己截的图
- README.md是说明文件
- assets是资源文件件
- build是外部构建的文件夹
- cmake-build-debug这个是CLion自动生成的文件夹
- src是主要的c文件目录
- pack是打包文件的文件夹
- sakabrew.sh是我自己编写的自动化文件
- logfile是sakabrew.sh文件生成的日志。
主要的CMakeLists.txt配置如下:
CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
set(CMAKE_C_STANDARD 99)
project(SWeather C)
set(VERSION_MAJOR 1)
set(VERSION_MINOR 3)
set(VERSION_PATCH 1)
#采用debug模式时启用'ENABLE_DEBUG'
IF (CMAKE_BUILD_TYPE STREQUAL Debug)
ADD_DEFINITIONS(-DENABLE_DEBUG)
ENDIF (CMAKE_BUILD_TYPE STREQUAL Debug)
add_subdirectory(src)
include(InstallRequiredSystemLibraries)
set