转自:

作者:知乎用户
链接: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会方便,我也没试过。

【转】make makefile cmake qmake都是什么,有什么区别?相关推荐

  1. CMake和Make——make makefile cmake qmake都是什么,有什么区别?

    作者:玟清 链接:https://www.zhihu.com/question/27455963/answer/36722992 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

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

    123 qmake是一个协助简化跨平台进行专案开发的构建过程的工具程式,Qt附带的工具之一 . 总结一下,make用来执行Makefile,cmake用来执行CMakeLists.txt,qmake用 ...

  3. C++工程管理 版本控制git Makefile cmake LInux

    工程管理 git git 命令 创建仓库 远端仓库 生成秘钥 git 原理 git add git commit git 整理操作 git 冲突 git checkout git push git f ...

  4. makefile / CMake

    - makefile syntax 'ifneq' https://www.gnu.org/software/make/manual/html_node/Conditional-Example.htm ...

  5. ubuntu-make/makefile/cmake

    自己手写CMakeLists.txt.写完CMakeLists.txt执行两步 1.cmake //使用cmake指令,根据CMakeLists.txt生成makefile: 2.make //使用m ...

  6. make,makefile,cmake“暴力编译法”的个人经验或理解。

    通常我们在本地编译库(opecv.pcl)等我们喜欢使用make -jN  (N代表线程数)这样可以加速编译过程, 但是,这不一定是"线程安全"的,因为当某个线程在编译时,经常其他 ...

  7. cmake qmake

    https://blog.csdn.net/vbskj/article/details/7792061

  8. Cmake的install与file命令的区别

    实际上他们两个可以达到一个目标(对于文件操作),但是又有本质上的区别,文档没有细看,但是一般利于项目的管理,使用install,install命令如果在cmake命令中没有指名install参数,实际 ...

  9. 【备忘】es统计用户留存数据,公式都一样,语句和mysql区别很大

    //es统计用户留存数据,公式都一样,语句和mysql区别很大 {"query": {"bool": {"must": [{"ra ...

最新文章

  1. 双十一购物节,Nacos 1.4.0 + Go SDK 1.0.1发布
  2. 搭建scala 开发spark程序环境及实例演示
  3. linux是不是显示不了中文版,Linux为什么OpenOffice下不能显示中文
  4. html csv 中文乱码,csv 中文乱码
  5. matlab 随机函数的使用
  6. Word怎么转换成PDF?
  7. inDesign教程,如何在文档中添加链接和动画?
  8. php本地文件包含 截断,php本地文件包含远程文件包含
  9. matlab 并联机器人,MATLAB在并联机器人运动仿真中的应用
  10. 好文推荐(二):临界点-产品思维与设计思维(7)
  11. 易宝支付 CTO 陈斌:如何做一个好的 CTO
  12. 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)...
  13. 解决Linux命令行前出现base
  14. org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 1 in XML document from U
  15. KMS激活错误解决方法
  16. 看尚c49s电视恢复出厂设置后无法注册问题
  17. plsql相同变量高亮显示
  18. 【环境部署系列 06】Ascend 310(推理)X86服务器 Ubuntu系统环境部署
  19. Python面向对象编程---多态
  20. DES 加密算法的实现

热门文章

  1. 在工程中最常用的 vim使用技巧
  2. 4 文件操作 支持图片 视频 mp3 文本等
  3. docker安装mysql5.6,安装redis3.2
  4. 《深入理解Java虚拟机》读书笔记一
  5. SpaceVim 语言模块 lua
  6. 上传文件插件(plupload)
  7. ASP.NET中使用非托管DLL
  8. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第26篇]描述NAF标量乘法算法
  9. matlab窗函数带通滤波器,Matlab结合窗函数法设计数字带通FIR滤波器
  10. python多线程并发写入_Python多线程并发的简单测试