作者:玟清
链接: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用户),于是就有了跨平台项目管理工具cmake4. 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. 接着是qmake,qmake是什么,先说一下Qt这个东西。Qt是跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。简单的说就是C++的第三方库,使用这个库你可以很容易生成windows,Linux,MAC os等等平台的图形界面。现在的Qt还包含了开发各种软件一般需要用到的功能模块(网络,数据库,XML,多线程啊等等),比你直接用C++(只带标准内裤那种)要方便和简单。
  12. 你可以用Qt简简单单就实现非常复杂的功能,是因为Qt对C++进行了扩展,你写一行代码,Qt在背后帮你写了几百上千行,而这些多出来的代码就是靠Qt专有的moc编译器(The Meta-Object Compiler)和uic编译器(User Interface Complier)来重新翻译你那一行代码。问题来了,你在进行程序编译前就必须先调用moc和uic对Qt源文件进行预处理,然后再调用编译器进行编译。上面说的那种普通makefile文件是不适用的,它没办法对qt源文件进行预处理。所以qmake就产生了。
  13. qmake工具就是Qt公司制造出来,用来生成Qt 专用makefile文件,这种makefile文件就能自动智能调用moc和uic对源程序进行预处理和编译。qmake当然必须也是跨平台的,跟cmake一样能对应各种平台生成对应makefile文件。
  14. qmake是根据Qt 工程文件(.pro)来生成对应的makefile的。工程文件(.pro)相对来说比较简单,一般工程你都可以自己手写,但是一般都是由Qt的开发环境 Qt Creator自动生成的,你还是只需要按下那个邪恶三角形就完事了。
  15. 还没有完,由于qmake很简单很好用又支持跨平台,而且是可以独立于它的IDE,所以你也可以用在非Qt工程上面,照样可以生成普通的makefile,只要在pro文件中加入CONFIG -= qt 就可以了。
  16. 这样qmake和cmake有什么区别? 不好意思,cmake也是同样支持Qt程序的,cmake也能生成针对qt 程序的那种特殊makefile, 只是cmake的CMakeLists.txt 写起来相对与qmake的pro文件复杂点。 qmake 是为 Qt 量身打造的,使用起来非常方便,但是cmake功能比qmake强大。 一般的Qt工程你就直接使用qmake就可以了,cmake的强大功能一般人是用不到的。 当你的工程非常大的时候,又有qt部分的子工程,又有其他语言的部分子工程,据说用cmake会 方便,我也没试过。

CMake和Make——make makefile cmake qmake都是什么,有什么区别?相关推荐

  1. 【转】make makefile cmake qmake都是什么,有什么区别?

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

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

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

  3. makefile / CMake

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

  4. cmake,CMakeLists.txt,make,makefile的关系

    cmake的作用:生成makefile的工具.读入源文件之后,自动生成makefile CMakeLists.txt的作用:告诉cmake,如何生成makefile makefile的作用:设置编译规 ...

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

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

  6. linux下cmake命令行,深入理解CMake(1): CMake命令行参数

    初衷 CMake能用来编写跨平台(cross-platform)的构建规则,通过这些规则来调用各个平台的编译器.链接器,生成各个目标(静态库,静态库,或者可执行). 我第一个接触的大型C++项目是Op ...

  7. 初识CMake,如何编写一个CMake工程(上)

    如何编写一个CMake工程 笔者想分享CMake工程的原因? 1 接触CMake 1.1 认识CMake被广泛的使用? 1.2 了解CMake运行流程 1.3 Make和Makefile是什么关系? ...

  8. 初识CMake,如何编写一个CMake工程(下)

    如何编写一个CMake工程 上文分析了针对一个源文件.多个源文件.多个目录的情况 1 CMake自定义编译选项Demo4 1.1 效果展示 2 CMake安装(make install)与测试(mak ...

  9. CMake 基础用法,掌握 CMake 诀窍

    CMake 是一个开源的.跨平台的工具系列,用于构建.测试和打包软件.CMake 用于使用简单的平台和编译器独立的配置文件(CMakeLists.txt)来控制软件编译过程,并生成可以在您选择的编译环 ...

最新文章

  1. 微软:杀死那个曾经全球第一的浏览器
  2. Spring学习(23)--- AOP之Introductions应用
  3. vector的插入、lower_bound、upper_bound、equal_range实例
  4. 线程:创建--【J2SE】
  5. office2016word 每次打开都有进度条问题 解决方式
  6. 前端面试-综合问题版
  7. python3读写excel文件_python3 循环读取excel文件并写入json操作
  8. 在控制台程序中隐藏控制台窗口
  9. linux下文件无法删除不能编辑
  10. QT的QDBusPendingReply类的使用
  11. python语言print函数_Python 的 print 函数
  12. ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol
  13. idea设置自定义代码模板(webstorm也是如此)
  14. NO.47 确定项目要完成的需求列表
  15. Ubuntu 安装Oprofile
  16. RestTemplate异常no suitable HttpMessageConverter found for request type [java.lang.Integer]
  17. python视频教程免费慕课网-python视频教程慕课 | 最好的python视频教程谁有
  18. gpt和mbr用来装服务器系统,给win10分区用MBR还是GPT?详解MBR还是GPT的区别
  19. 虾米音乐关停:网友泪崩 一代人的青春落幕
  20. ireport简单报表打印

热门文章

  1. pytorch中的expand()和expand_as()函数--扩展张量中某维数据的尺寸
  2. 对抗机器学习(Adversarial Machine Learning)发展现状
  3. Linux 不小心删除了 root,root目录不小心删除了怎么办……
  4. np.linalg.norm()用法
  5. vue-cli如何创建项目到计算机指定位置(如何自定义选择磁盘?)
  6. 天气预报API接口 : 城市对应码(中国天气网)
  7. python画画加粗_Matplotlib'粗体'字体 - python
  8. 运营级IOS一键签名程序源码 支持app超级签名一键分发平台
  9. 百度SEO站群易优CMS 聚合关键词seo插件(上权重神器)
  10. Java | 用Java实现冒泡排序算法