gcc/make/makefile/cmake/qmake的区别与联系

目录

  • 01 概述
  • 02 总结一下:
  • 03 具体使用时:
  • 04 参考材料

01 概述

  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会方便,我也没试过。

02 总结一下:

  1. make用来执行makefile,cmake用来执行CMakeLists.txt,qmake用来处理*.pro工程文件。
  2. makefile的抽象层次最低,cmake和qmake在Linux等环境下最后还是会生成一个makefile。
  3. cmake和qmake支持跨平台,cmake的做法是生成指定编译器的工程文件,而qmake完全自成体系。

03 具体使用时:

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

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

04 参考材料

  1. make makefile cmake qmake都是什么,有什么区别? - 辉常哥的回答 - 知乎
    https://www.zhihu.com/question/27455963/answer/89770919
  2. make makefile cmake qmake都是什么,有什么区别? - 玟清的回答 - 知乎
    https://www.zhihu.com/question/27455963/answer/36722992

原文地址:https://www.cnblogs.com/dalinuoer/p/12347159.html

时间: 2024-08-29 14:12:38

gcc/make/makefile/cmake/qmake的区别与联系的相关文章

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

原文:https://www.zhihu.com/question/27455963 作者:玟清链接:https://www.zhihu.com/question/27455963/answer/36722992来源:知乎著作权归作者所有,转载请联系作者获得授权. 1. make 是用来执行Makefile的2. Makefile是类unix环境下(比如Linux)的类似于批处理的"脚本"文件.其基本语法是: 目标+依赖+命令,只有在目标文件不存在,或目标比依赖的文件更旧,命令才会被执

gcc/g++/make/cmake/makefile/cmakelists的恩恩怨怨

以前在windows下用VS写代码,不管有多少个文件夹,有多少个文件,写完以后只需要一键就什么都搞定了.但是当移步linux下时,除非你使用图形界面,并且使用Qt creater这类的IDE时,才可以继续像windows下一样一键搞定所有事情,否则就不得不接触gcc/g++/make/cmake/makefile/cmakelists这些东西了,那他们是干什么的呢?彼此之间又是什么关系呢? 1.gcc/g++ gcc是GNU Compiler Collection的全称,是一个编译套件.通过gc

make, cmake, qmake

作者:辉常哥链接:https://www.zhihu.com/question/27455963/answer/89770919著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C.C++.Objective-C.Fortran.Java等等). 2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它. 3.但是当你的程序包含很多个源文

转载 cc、gcc、g++、CC的区别概括

gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Linux/Unix都是大小写敏感的系统,这点一定要注意. cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collection,GNU编译器套装.gcc原名为Gun C语言编译器,因为它原本只能处理C语言,但gcc很快地扩展,包含很多编译器(C.C++.Objective

GCC、Makefile编程学习

相关学习资料 http://gcc.gnu.org/ https://gcc.gnu.org/onlinedocs/ http://zh.wikipedia.org/zh/GCC http://blog.csdn.net/casularm/article/details/316149 http://www.bccn.net/Article/kfyy/cyy/jc/200409/9.html http://linux.chinaunix.net/techdoc/develop/2008/12/16

gcc gdb makefile学习笔记

一.gcc (GNU C compiler )1.预处理  gcc -E aaa.c  -o aaa.i   →  .i(c代码)    ↓ 2. 编译   gcc -S aaa.i  -o aaa.s   →   .s(汇编代码)    ↓3. 汇编   gcc -c  aaa.s  -o aaa.o  →   .o(目标代码-二进制)    ↓4. 链接   gcc aaa.o    -o aaa    →   aaa(可执行文件) 优化编译链接   gcc -O(O2/O3) aaa.o

GCC,GDB,Makefile和IO复用函数

2015.1.22 c高级的环境搭建:GCC编译器:全称 GUN CC,是GNU工具(tool chain)的一种,源码编译成机器码,gcc的编译依赖于很多小工具4.3.3和3.4.3版本的比较稳定 GCC编译分为四个步骤:(用WC命令可以分别查看每个阶段代码的大小,可以比较一下,ls -l 也能看出大小) 1.预处理 ->cpp预处理文件*.i gcc -E2.编译 ->cc1汇编文件*.s gcc -S3.汇编 ->as汇编文件*.o gcc -c4.链接 ->ld可执行文件*

Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis  gcc和whereis  make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC编译运行一个HelloWorld程序(只涉及单个文件) 可以在任何一个目录编写C程序然后编译运行,我这个实例在自己主目录进行: 然后就进入了编写程序的界面: 按下键盘”i”进入编辑界面,然后输入程序: 按ESC(进入命令行模式),然后输入”:wq”,冒号表示开始输入命令,字母w代表保存文件,字母q代

CMAKE 和 MAKE 区别

大家都知道,写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器连接目标代码生成可执行文件,如.exe. 但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译.但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的