一. 简介
经过前一篇文章的学习,针对不同平台下编译 .c工程时,为了不用针对不同平台编写(不同标准,不同规范)Makefile文件,提出了 cmake工具,cmake可以解决跨平台编译的问题。
cmake 就是针对这个问题所诞生,允许开发者编写一种与平台无关的 CMakeLists.txt 文件来制定整个工程的编译流程,再根据具体的编译平台,生成本地化的 Makefile 和工程文件,最后执行 make 编译。
本文学习针对单个 .c源文件,cmake工具是如何编译的?
二. Linux系统下安装 cmake工具
cmake
就是一个工具命令,在
Ubuntu
系统下通过
apt-get
命令可以在线安装,输入如下命令进行安装:
sudo apt-get install cmake
输入 "cmake --version" 命令可以查看cmake工具是否安装:
可以看出,当前系统安装的
cmake
对应的版本号为
3.16.3
,
cmake
工具版本更新也是比较快的,从官
网
https://cmake.org/
可知,
cmake
最新版本为
3.22.0
,不过这都没关系,其实使用哪个版本都是可以的,差
别并不会太大,所以这个大家不用担心。
三. cmake的使用方法:单个源文件的编译
安装完
cmake
工具之后,接着我们就来学习如何去使用
cmake
。
cmake
官方也给大家提供相应教程,链接地址如下所示:
https://cmake.org/documentation/ //文档总链接地址
https://cmake.org/cmake/help/latest/guide/tutorial/index.html //培训教程
如果大家自学能力强,完全可以参考官方提供的培训教程学习
cmake
;对于
cmake
的学习,笔者给大家
两个建议:
1.
从简单开始、再到复杂!
2.
重点是自己动手多练习。
接下来从一个非常简单的示例开始向大家介绍如何使用
cmake
,再从这个示例进一步扩展、提出
更多需求,来看看
cmake
如何去满足这些需求。
单个源文件的程序通常是最简单的,一个经典的
C
程序“
Hello World
”,如何用
cmake
来进行构建呢?
1. 源码文件 main.c
#include <stdio.h>
int main(int argc, char argv[])
{
printf("Hello World!\n");
return 0;
}
2. 创建 一个 CMakeLists.txt文件
现在我们需要新建一个
CMakeLists.txt
文件,
CMakeLists.txt
文件会被
cmake
工具解析,就好比是
Makefile
文件会被
make
工具解析一样;
CMakeLists.txt
创建完成之后,在文件中写入如下内容:
project(HELLO)
add_executable(hello ./main.c)
写入完成之后,保存退出,当前工程目录结构如下所示:
在我们的工程目录下有两个文件,源文件
main.c
和
CMakeLists.txt
。
接着我们在工程目录下直接执行
cmake
命令,如下所示:
cmake ./
cmake
后面携带的路径指定了
CMakeLists.txt
文件的所在路径,执行结果如下所示:
执行完
cmake
之后,除了源文件
main.c
和
CMakeLists.txt
之外,可以看到当前目录下生成了很多其它的文件或文件夹,包括:
CMakeCache.txt
、
CmakeFiles
、
cmake_install.cmake
、
Makefile
,
重点是生成了这个 Makefile 文件,有了 Makefile 之后,接着我们使用 make 工具编译我们的工程,输入 make命令进行编译:
通过
make
编译之后得到了一个可执行文件
hello
,这个名字是在
CMakeLists.txt
文件中指定的,稍后向大家介绍。
通过 file 命令可以查看到 hello 是一个 x86-64 架构下的可执行文件,所以只能在我们的 Ubuntu PC 上运行:
为了验证
hello
可执行文件运行结果是否与源代码相同,我们直接在
Ubuntu 下运行即可,如下所示:
上面我们通过了一个非常简单例子向大家演示了如何使用 cmake,重点在于去编写一个 CMakeLists.txt文件,接下来分析一下 CMakeLists.txt 文件中内容。