gcc与cmake、qmake与make、ninja

gcc

gcc是GNU Compiler Collection(GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。当你的程序只有一个源文件时,直接就可以用gcc命令编译它。

但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,**所以出现了make工具 **。

make

make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc(或其他编译器)去编译某个源文件的命令。makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。

cmake

这时候就出现了cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。cmake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。cmake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。

当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile,而CMakeLists.txt文件是需要自己手写的。

当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形。

cmake是make maker,生成各种可以直接控制编译过程的控制器的配置文件,比如makefile、各种IDE的配置文件。make是一个简单的通过文件时间戳控制自动过程、处理依赖关系的软件,这个自动过程可以是编译一个项目。

有关gcc、cmake、make之间的关系图如下(图片来源于网络):

gcc与cmake、qmake与make、ninja_第1张图片

qmake

qmake工具就是Qt公司制造出来,用来生成Qt专用makefile文件,这种makefile文件就能自动智能调用moc和uic对源程序进行预处理和编译。qmake当然必须也是跨平台的,跟cmake一样能对应各种平台生成对应makefile文件,因此,Qt中的qmake和cmake的作用是相似的,qmake是根据Qt工程文件(.pro)来生成对应的makefile的

另外,cmake也是同样支持Qt程序的,cmake也能生成针对qt 程序的那种特殊makefile,只是cmake的CMakeLists.txt 写起来相对与qmake的.pro文件复杂一些。qmake 是为Qt量身打造的,使用起来非常方便,但是cmake功能比qmake强大。

ninja

在传统的 C/C++ 等项目构建时,通常会采用 make 系统使用 Makefile 文件来进行整个项目的编译构建,通过 Makefile 中指定的编译所依赖的规则使得程序的构建非常简单,并且在复杂项目中可以避免由于少部分源码修改而造成的很多不必要的重编译。但是它仍然不够好,因为其大而且复杂,有时候我们并不需要 make 那么强大的功能,相反我们需要更灵活,速度更快的编译工具,Ninja 作为一个新型的编译工具,小巧而又高效,它就是为此而生。

参考文章:

  1. make, cmake, qmake 这些到底是什么鬼??
  2. 使用 Ninja 代替 make

你可能感兴趣的:(qt,开发语言,c++)