cmake nmake qmake 的区别联系
Posted 一去丶二三里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake nmake qmake 的区别联系相关的知识,希望对你有一定的参考价值。
👇推荐关注👇
经常记不住这几个概念,都看了几次了还是容易忘,为以后方面查阅,故而从知乎上复制粘贴过来。
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会 方便,我也没试过。
qmake和nmake
2012年04月11日 14:34:09 congwulong 阅读数 3230
<<<<<<<<<<<<<<<<<<<<<<<<qmake是做什么的?
qmake是用来生成makefile的。
makefile是干嘛的?
makefile里记录了工程中的所有文件,编译器编译时根据makefile文件来进行编译。
qmake怎么生成makefile?
它基于项目文件来生成,(.pro文件)项目文件由开发者创建。
如果是在windows下使用VS开发,首先要把qmake的环境变量设置为win32-msvc。
pro文件用来告诉qmake如何生成makefile。如该项目有哪些源文件和头文件,该应用程序的特定配置,比如需要链接的额外的库,
或者一个额外的包含路径,这些都应该放在项目文件中。
总结:手写makefile文件比较困难而且容易出错,使用qmake,开发者只需要创建一个简单的项目文件,再运行
qmake就可以生成适当的makefile了。
<<<<<<<<<<<<<<<<<<<<<<<<nmake是做什么的?
它处理makefile文件,解释里边的语句并执行相应的指令。
调用NMAKE时,它会检查所有相关的文件,如果目标文件的时间戳小于依赖文件的,那nmake就执行该依赖关系相关联的操作。
举例说明:
foo.exe : first.obj second.obj
link first.obj, second.obj
第一行定义了依赖关系;第二行给出了该依赖关系相关联的操作。
如果first.obj和second.obj任何一个修改了,那就得调用link.exe,重新链接生成foo.exe。
这就是nmake的执行逻辑。
<<<<<<<<<<<<<<<<<<<<<<<<makefile的语法
略...
总结:nmake就相当于一个解释程序,makefile是一个编程语言,写的程序(makefile文件)由nmake来解释执行
make-makefile -- cmake nmake qmake的区别联系
2018年04月20日 10:13:10 决战小树林 阅读数 182
一、make 是用来执行Makefile文件的。Makefile是类unix环境下(比如Linux)的类似于批处理的"脚本"文件。其基本语法是: 目标+依赖+命令,只有在目标文件不存在,或目标比依赖的文件更旧,命令才会被执行。由此可见,Makefile和make可适用于任意工作,不限于编程。比如,可以用来管理latex。
二、Makefile+make可理解为类unix环境下的项目管理工具,但它太基础了,抽象程度不高,而且在windows下不太友好(针对visual studio用户),于是就有了跨平台项目管理工具cmake。
三、 cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。虽然,仍然是目标,依赖之类的东西,但更为抽象和友好,比如你可用math表示数学库,而不需要再具体指定到底是math.dll还是libmath.so,在windows下它会支持生成visual studio的工程,在linux下它会生成Makefile,甚至它还能生成eclipse工程文件。也就是说,从同一个抽象规则出发,它为各个编译器定制工程文件。cmake是抽象层次更高的项目管理工具,cmake命令执行的CMakeLists.txt文件。
四、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完全自成体系。nmake一般用于windows系统vs的编译。
cmake\\qmake -- 跨平台 -- 生成 MakeFile
nmake -- windows vs -- 生成MakeFile
make -- MakeFile
个人总结,有什么不对的地方还望指正,谢谢!
链接:https://www.zhihu.com/question/27455963/answer/89770919
·················· END ··················
为便于交流,我创建了几个高质量的技术群,里面有很多大佬。
如果你也想加入,可以扫描以下二维码,加我个人微信(iwaleon),邀请入群!
以上是关于cmake nmake qmake 的区别联系的主要内容,如果未能解决你的问题,请参考以下文章
gcc/make/makefile/cmake/qmake的区别与联系
make makefile cmake qmake都是什么,有什么区别
使用 CMake 配置 Eigen 3.3.7 时从 C:/Qt/5.12.4/msvc2015_64/bin/qmake.exe 发现不合适的 Qt 版本“5.12.4”