make makefile cmake qmake都是什么,有什么区别

原文:https://www.zhihu.com/question/27455963linux

做者:玟清
连接:https://www.zhihu.com/question/27455963/answer/36722992
来源:知乎
著做权归做者全部,转载请联系做者得到受权。

1. make 是用来执行Makefile的
2. Makefile是类unix环境下(好比Linux)的相似于批处理的"脚本"文件。其基本语法是: 目标+依赖+命令,只有在 目标文件不存在,或 目标依赖的文件更旧, 命令才会被执行。因而可知,Makefile和make可适用于任意工做,不限于编程。好比,能够用来管理latex。
3. Makefile+make可理解为类unix环境下的项目管理工具,但它太基础了,抽象程度不高,并且在windows下不太友好(针对visual studio用户),因而就有了跨平台项目管理工具cmake
4. cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。虽然,仍然是目标,依赖之类的东西,但更为抽象和友好,好比你可用math表示数学库,而不须要再具体指定究竟是math.dll仍是libmath.so,在windows下它会支持生成visual studio的工程,在linux下它会生成Makefile,甚至它还能生成eclipse工程文件。也就是说,从同一个抽象规则出发,它为各个编译器定制工程文件。
5. cmake是抽象层次更高的项目管理工具,cmake命令执行的CMakeLists.txt文件
6. qmake是Qt专用的项目管理工具,对应的工程文件是*.pro,在Linux下面它也会生成Makefile,固然,在命令行下才会须要手动执行qmake,彻底能够在qtcreator这个专用的IDE下面打开*.pro文件,使用qmake命令的繁琐细节不用你管了。

总结一下,make用来执行Makefile,cmake用来执行CMakeLists.txt,qmake用来处理*.pro工程文件。Makefile的抽象层次最低,cmake和qmake在Linux等环境下最后仍是会生成一个Makefile。cmake和qmake支持跨平台,cmake的作法是生成指定编译器的工程文件,而qmake彻底自成体系。

具体使用时,Linux下,小工程可手动写Makefile,大工程用automake来帮你生成Makefile,要想跨平台,就用cmake。若是GUI用了Qt,也能够用qmake+*.pro来管理工程,这也是跨平台的。固然,cmake中也有针对Qt的一些规则,并代替qmake帮你将qt相关的命令整理好了。

另外,须要指出的是,make和cmake主要命令只有一条,make用于处理Makefile,cmake用来转译CMakeLists.txt,而qmake是一个体系,用于支撑一个编程环境,它还包含除qmake以外的其它多条命令(好比uic,rcc,moc)。

上个简图,其中cl表示visual studio的编译器,gcc表示linux下的编译器
做者:辉常哥
连接:https://www.zhihu.com/question/27455963/answer/89770919
来源:知乎
著做权归做者全部,转载请联系做者得到受权。

1.gcc是GNU Compiler Collection(就是GNU编译器套件),也能够简单认为是编译器,它能够编译不少种编程语言(括C、C++、Objective-C、Fortran、Java等等)。 2.当你的程序只有一个源文件时,直接就能够用gcc命令编译它。 3.可是当你的程序包含不少个源文件时,用gcc命令逐个去编译时,你就很容易混乱并且工做量大 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文件谁写啊?亲,是你本身手写的。 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会 方便,我也没试过。
相关文章
相关标签/搜索