CMake是一个怎么样的工具

CMake 是什么

是一个工具集,用来生成构建工具脚本,例如 ninja(跨平台),make(linux),visual studio(win),xcode(mac)
就像一个厨师,你把菜递给他,他选择用什么样的工具帮您编译。

CMake 的作用

总得来说

  • 作用是:编译+测试+打包
  1. 生成构建工具,构建源码
  2. 单元测试
  3. 打包(编译构建工具,或者是源码)比如说做成 rpm 包之类的,就是给人的印象很好,因为是适配平台的直接安装的过程,而则需要用到打包

为什么需要 CMake

使用便利

其实从最大的用处上来说,他们就是提供了一个平台,实现编译期大部分跨平台的功能(如果调用了系统的 API 可能跨不了)。如果你学会 CMake,那么就无需纠结你是在什么平台下去编译,而额外学习一门新的工具,真正做到了一站式通用。
例如可以看这一篇: 从Makefile到CMake

历史原因

CMake 的产生可以追溯到20世纪90年代末期。当时,为了提高软件跨平台的构建效率,Kitware的团队开始开发一个名为CMake(Cross-platform Make)的工具。CMake 最初是为了简化 ITK(Insight Segmentation and Registration Toolkit)项目在不同平台上的编译而开发的。后来,开发团队意识到这样一个工具对于广大开发者来说将是非常有用的,所以他们决定将其开源。随后,CMake 很快成为了开源社区中广泛接受的构建系统之一,特别是它的简洁和扩展性得到了很多大型项目的青睐,例如 KDE,OpenCV 等。

帮助理解编译流程

我在第一去学习 c++使用是使用的 Visual Studio ,而没有经常性去接触到关于项目构建的问题,有时候会出现链接问题,而去查看相关 blog 的时候也是一知半解,但是结果 CMake 的学习之后才是真正理解了编译流程

方便项目的管理

由于每一个文件都有 CMakelist 的 txt 文件,所以只要是出现编译相关的错误我们可以很快速的定位到 CMakelist 是错误配置,而写成类似文档的形式,排除起来也比命令行简单。

其他高级功能

自动化侦测:CMake 可以自动检测系统环境,寻找编译器、库和其他工具,自动化处理许多编译时需要的设置。
高级功能:CMake 提供了丰富的指令集合,用于实现诸如编译选项管理、依赖关系追踪、测试自动化、安装和打包等高级构建功能。
多配置生成:CMake 能够为多种构建类型生成配置(如 Debug、Release),便于开发者在不同的构建类型之间切换。