参考1:https://fukun.org/archives/0421949.html
1、为什么需要cmake
任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。
决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建(编译)并维护项目代码。
一份源代码,从开始产生到成为可执行程序的过程:预处理——编译——汇编——链接,其中,编译是主要部分。cmake帮助我们解决的主要就是代码编译。
2、cmake和makefile的关系
cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。
3、cmake的主要特点
cmake和autotools都是项目管理工具,有各自的特点和用户群。cmake的特点如下:
1.开放源代码,使用类 BSD 许可发布。
2.跨平台,并可生成 native 编译配置文。在 Linux/Unix 平台,生成 makefile,在 苹果平台生成 xcode;在 Windows 平台生成 MSVC 的工程文件(cmake多用于Linux/Unix 平台,Windows平台下有丰富的IDE取代了cmake的作用)。
3.能够管理大型项目,KDE4 就是最好的证明。
4.简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
5.高效率,按照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比使用 autotools 来 构建 KDE3.5.6 的 kdelibs 快 40%,主要是因为 Cmake 在工具链中没有 libtool。
6.可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。