认识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++项目的标配。