CMake应用:基础篇

CMake是一个开源、跨平台的编译、测试和打包工具,它使用比较简单的语言描述编译、安装的过程,输出Makefile或者project文件,再去执行构建。

在使用IDE开发软件的过程中,代码的编译和构建一般是使用IDE自带的编译工具和环境进行编译,开发者参与的并不算多。如果想要控制构建的细节,则需要开发者自己定义构建的过程。

本文主要介绍以下内容:

  1. 编译构建相关的核心概念及它们之间的关系

  2. CMake的一般使用流程

  3. 一个简单的实例

一 核心概念

1 gcc、make和cmake

gcc(GNU Compiler Collection)将源文件编译(Compile)成可执行文件或者库文件;

而当需要编译的东西很多时,需要说明先编译什么,后编译什么,这个过程称为构建(Build)。常用的工具是make,对应的定义构建过程的文件为Makefile

而编写MakeFile对于大型项目又比较复杂,通过CMake就可以使用更加简洁的语法定义构建的流程,CMake定义构建过程的文件为CMakeLists.txt

它们的大致关系如下图:

图片

这里的GCC只是示例,也可以是其他的编译工具。这里的Bin表示目标文件,可以是可执行文件或者库文件。

二 CMake一般使用流程

CMake提供cmake、ctest和cpack三个命令行工具分别负责构建、测试和打包。本文主要介绍cmake命令。

使用cmake一般流程为:

  1. 生成构建系统(buildsystem,比如make工具对应的Makefile);

  2. 执行构建(比如make),生成目标文件;

  3. 执行测试、安装或打包。

本文先介绍前面两个步骤。

1 生成构建系统

通过cmake命令生成构建系统。

通过cmake --help可以看到cmake命令支持的详细参数,常用的参数如下:

参数含义
-S指定源文件根目录,必须包含一个CMakeLists.txt文件
-B指定构建目录,构建生成的中间文件和目标文件的生成路径
-D指定变量,格式为-D <var>=<value>,-D后的空格可省略

比如,指明使用当前目录作为源文件目录,其中包含CMakeLists.txt文件;使用build目录作为构建目录;设定变量CMAKE_BUILD_TYPE的值为Debug,变量AUTHOR的值为RealCoolEngineer

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DAUTHOR=RealCoolEngineer

使用-D设置的变量在CMakeLists.txt中生效,可以设置cmake的内置支持的一些变量控制构建的行为;当然也可以使用自定义的变量,在CMakeLists.txt中自行判断做不同的处理。

2 执行构建

使用cmake --build [<dir> | --preset <preset>]执行构建。

这里要指定的目录就是生成构建系统时指定的构建目录。常用的参数如下:

参数含义
--target指定构建目标代替默认的构建目标,可以指定多个
--parallel/-j [<jobs>]指定构建目标时使用的进程数

在这一步,如果使用的是make构建工具,则可以在构建目录下直接使用make命令。

三 CMake应用示例

1 一个简单的例子

下面使用cmake编译一个c语言的hello world程序。创建一个项目文件夹cmake-template,目录结构如下:

cmake-template
├── CMakeLists.txt
└── src
    └── c
        └── main.c

main.c内容如下:

// @Author: Farmer Li, 公众号: 很酷的程序员/RealCoolEngineer
// @Date: 2021-04-24

#include <stdio.h>

int main(void) {
  printf("Hello CMake!");

  return 0;
}

CMakeLists.txt的内容如下:

cmake_minimum_required(VERSION 3.12)
project(cmake_template VERSION 1.0.0 LANGUAGES C CXX)

add_executable(demo src/c/main.c)

该CMakeLists.txt声明了需要使用的cmake的最低版本;项目的名字、版本以及编译语言;最后一句定义了通过源文件main.c生成可执行文件demo。

详细的CMake语法在本文暂不展开,后续会有专门的文章介绍,敬请关注(#^.^#)。

2 生成构建系统

cmake-template目录下,执行以下命令:

cmake -B build

执行完成后,在项目的根目录下会创建build目录,可以看到其中生成了Makefile文件。

3 执行构建

还是在cmake-template目录下,执行以下命令:

cmake --build build

因为使用的是make工具,所以也可以在build目录直接执行make命令:

cd build && make && cd -

执行完成后,可以在build目录下看到已经生成可执行文件demo,执行demo:

➜ cmake-template # ./build/demo
Hello CMake!

上面演示了一个CMake的简单demo,着重介绍CMake的使用流程和命令。下一篇文章会介绍CMake常用的核心语法和更加复杂的demo。

本文示例代码上传到开源仓库:cmake-template,链接:

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值