1.gcc是GNU Compiler Collection(就是GNU编译器套件),也能够简单认为是编译器,它能够编译不少种编程语言(括C、C++、Objective-C、Fortran、Java等等)。数据库
2.当你的程序只有一个源文件时,直接就能够用gcc命令编译它。编程
3.可是当你的程序包含不少个源文件时,用gcc命令逐个去编译时,你就很容易混乱并且工做量大windows
4.因此出现了make工具
make工具能够当作是一个智能的批处理工具,它自己并无编译和连接的功能,而是用相似于批处理的方式—经过调用makefile文件中用户指定的命令来进行编译和连接的。服务器
5.makefile是什么?简单的说就像一首歌的曲谱,make工具就像指挥家,指挥家根据曲谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和连接的。网络
6.makefile命令中就包含了调用gcc(也能够是别的编译器)去编译某个源文件的命令。多线程
7.makefile在一些简单的工程彻底能够人工手下,可是当工程很是大的时候,手写makefile也是很是麻烦的,若是换了个平台makefile又要从新修改。框架
8.这时候就出现了Cmake这个工具,cmake就能够更加简单的生成makefile文件给上面那个make用。固然cmake还有其余功能,就是能够跨平台生成对应平台能用的makefile,你不用再本身去修改了。编程语言
9.但是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。工具
10.到最后CMakeLists.txt文件谁写啊?亲,是你本身手写的。ui
11.固然若是你用IDE,相似VS这些通常它都能帮你弄好了,你只须要按一下那个三角形
12.接着是qmake,qmake是什么,先说一下Qt这个东西。Qt是跨平台C++图形用户界面应用程序开发框架。它既能够开发GUI程序,也可用于开发非GUI程序,好比控制台工具和服务器。简单的说就是C++的第三方库,使用这个库你能够很容易生成windows,Linux,MAC os等等平台的图形界面。如今的Qt还包含了开发各类软件通常须要用到的功能模块(网络,数据库,XML,多线程啊等等),比你直接用C++(只带标准内裤那种)要方便和简单。
13.你能够用Qt简简单单就实现很是复杂的功能,是由于Qt对C++进行了扩展,你写一行代码,Qt在背后帮你写了几百上千行,而这些多出来的代码就是靠Qt专有的moc编译器(The Meta-Object Compiler)和uic编译器(User Interface Complier)来从新翻译你那一行代码。问题来了,你在进行程序编译前就必须先调用moc和uic对Qt源文件进行预处理,而后再调用编译器进行编译。上面说的那种普通makefile文件是不适用的,它没办法对qt源文件进行预处理。因此qmake就产生了。
14.qmake工具就是Qt公司制造出来,用来生成Qt 专用makefile文件,这种makefile文件就能自动智能调用moc和uic对源程序进行预处理和编译。qmake固然必须也是跨平台的,跟cmake同样能对应各类平台生成对应makefile文件。
15.qmake是根据Qt 工程文件(.pro)来生成对应的makefile的。工程文件(.pro)相对来讲比较简单,通常工程你均可以本身手写,可是通常都是由Qt的开发环境 Qt Creator自动生成的,你仍是只须要按下那个邪恶三角形就完事了。
16.尚未完,因为qmake很简单很好用又支持跨平台,并且是能够独立于它的IDE,因此你也能够用在非Qt工程上面,照样能够生成普通的makefile,只要在pro文件中加入CONFIG -= qt 就能够了。
17. 这样qmake和cmake有什么区别?很差意思,cmake也是一样支持Qt程序的,cmake也能生成针对qt 程序的那种特殊makefile,只是cmake的CMakeLists.txt 写起来相对与qmake的pro文件复杂点。qmake 是为 Qt 量身打造的,使用起来很是方便,可是cmake功能比qmake强大。通常的Qt工程你就直接使用qmake就能够了,cmake的强大功能通常人是用不到的。当你的工程很是大的时候,又有qt部分的子工程,又有其余语言的部分子工程,听说用cmake会 方便,我也没试过。