cmake构建工具的简单介绍

  我们建议初学者始终在一个IDE环境中进行C/C++的编程练习,这些IDE环境充当着构建工具的角色。以Qt Creator为例,其.pro项目文件存储了项目的全部配置信息,包括源代码文件、头文件、用户界面文件、数据文件、资源文件的组成和位置,文件之间的依赖关系和编译顺序,项目编译和调试的参数等信息。当用户试图构建一个应用程序时,IDE环境会调用gcc或者其它编译器及工具来完成相关任务,极大地简化了操作难度。

  如果开发者期望项目可以在不同的平台上编译和构建,一个名为cmake的构建工具允许开发者编写一个平台无关的CMakeList.txt文件来定制应用的编译/构建过程。目标用户在获得项目的全部源代码后,可以执行cmake命令生成本地化的Makefile,然后再执行make命令完成构建过程。cmake及make工具并不简单,此处我们只能通过一个极简的示例帮助读者概要地了解相关过程。

演示环境: 树莓派4B卡片式计算机(gcc版本10.2.1,Linux内核版本5.15)

1. 文件准备

  在/home/pi/C12_Build目录下准备4个文件。

  其中,area.c文件内容如下:

1
2
3
4
5
6
7
8
#include <stdio.h>
#include "compute.h"

int main(){
float r = 4.1f;
float a = circleArea(r); //comment
printf("Area of the circle = %f.\n",a);
}

  compute.c文件内容如下:

1
2
3
4
5
6
7
#include "compute.h"
#include "compute.h"

float circleArea(const float r){
float t = PI * SQUARE(r); //comment
return t;
}

  compute.h文件内容如下:

1
2
3
4
5
6
7
8
#ifndef _COMPUTE_H
#define _COMPUTE_H

#define PI 3.1415926 //comment
#define SQUARE(x) x*x
float circleArea(const float r);

#endif

  CMakeLists.txt文件内容如下:

1
2
3
cmake_minimum_required(VERSION 2.8)
project (C2CppBuildExample)
add_executable(CalcArea area.c compute.c)

第1行:规定了最低的cmake工作版本为2.8;

第2行:指定项目名称为C2CppBuildExample;

第3行:添加可执行文件,文件名为CalcArea, 其由area.c以及compute.c两个源程序文件编译、链接而成。

2. cmake

  如下图所示,在Linux终端中执行cmake . , 其中的.表示工作路径为当前路径。

  执行结束后,可以看到目录内多了一个名为Makefile的文件,该文件可被make工具解释执行,依该文件规定的步骤进行编译,即可得到目标可执行文件。从上图可以看到,cmake对平台环境进行了检查,确认了c语言及c++语言编译器的适用性以及版本,然后创建了合适的构建步骤和参数。

3. make

  然后执行make命令,从输出结果可见,make先是编译生成了area.c.o可重定位目标文件,然后编译生成了compute.c.o文件,接下来再进行了链接,生成可执行目标文件CalcArea。

  ./CalcArea的执行结果证实,构建出来的可执行目标文件工作正常。