CMake教程1:CMake是什么?

495 阅读2分钟

认识CMake

在介绍CMake之前,需要介绍一些计算机基础,这样能更好的理解CMake到底是什么。

如何编译程序

计算机语言只是一个标准规范,只定义了语法,而编译器的工作就是将源代码转换为机器语言。

不同的操作系统、不同的IDE可以自由选择使用的编译器,常见的C++编译器有:GCC(GNU Compiler Collection)、MSVC系列、 llvm+Clang、 TCC(Tiny C Compiler)、 Borland C++等等

假如使用GCC编译器进行程序开发,我们需要手动在命令行里面进行手动编译项目,大致过程是这样子:

# 手动编译源文件
$ gcc -Wall -g -o hello hello.c 
$ ./hello 
# 执行 
Hello world!

直接使用编译器命令构建程序,可以认为是第一代构建工具。

如何自动化构建程序

如果项目源文件非常多,每次都需要在命令行手动编译非常麻烦,于是就诞生了make工具Makefile文件,注意两者是配套的。

可以理解为make工具是一个批处理应用程序,Makefile文件指定了程序如何进行编译和链接(其实就是配置文件),两者配合使用就能实现半自动化构建程序。

常见的make工具有:GNU的gmake、MicroSoft的nmake、AutoMake等

makefile的诞生,可以认为是第二代构建工具。

如何跨平台开发程序

每个的make工具配套的Makefile文件编写规则都不兼容,在开发跨平台程序的时候,不可能每个平台的Makefile都写一遍,所以就诞生了跨平台的make工具,比如:

  • Qt的qmake:为Qt量身打造
  • Scons:Python语言编码的自动化构建工具,Godot Game Engine的跨平台编译使用的就是它。
  • xmake:Lua语言编码的自动化构建工具,国产的,使用者不是很多。
  • kitware的cmake:使用CMakeLists.txt作为配置的构建工具,自己发明了一套语法,目前的主流构建工具。

CMake可以输出各种Makefile(namke、gmake)和Project工程(visual studio、xcode),无论是学习曲线还是易用性都比较平缓,所以现在的跨平台游戏引擎和开源C/C++项目大部分都选择了CMake

第三代构建工具很重要的一个特点就是跨平台

总结

CMake可以理解为使用平台无关的配置文件,自动编译链接程序的一个工具集,最大的优势就是跨平台。

cmake几乎已经成为了c/c++项目的标配。