qmake学习记录——关于qmake、makefile和make

1.基础知识

1.1、gcc

gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等),可以通过gcc命令逐个进行编译。

1.2、make

当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大。make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。

1.3、makefile

makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。

makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。makefile在一些简单的工程完全可以人工手写,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修,非常麻烦。

1.4、cmake

为了修复1.3的问题,出现了cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。

cmake根据一个叫CMakeLists.txt文件去生成makefile。最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形

1.5、qmake

qmake类似于cmake,也可以通过用户定义的pro文件生成对应的makefile。

qmake工具就是Qt公司制造出来,用来生成Qt专用makefile文件,这种makefile文件就能自动智能调用moc和uic对源程序进行预处理和编译。

qmake当然必须也是跨平台的,跟cmake一样能对应各种平台生成对应makefile文件。qmake是根据Qt 工程文件(.pro)来生成对应的makefile的。工程文件(.pro)相对来说比较简单,一般工程你都可以自己手写,但是一般都是由Qt的开发环境 Qt Creator自动生成的,你还是只需要按下那个邪恶三角形就完事了。

由于qmake很简单很好用又支持跨平台,而且是可以独立于它的IDE,所以你也可以用在非Qt工程上面,照样可以生成普通的makefile,只要在pro文件中加入CONFIG -= qt 就可以了。

1.6、make install

是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

本节参考:https://blog.csdn.net/u010710458/article/details/80175233

2.qmake模式

运行qmake的语法采用以下简单形式:

  qmake [模式] [选项] 文件

qmake支持两种不同的操作模式。 在默认模式下,qmake使用项目文件中的信息来生成Makefile,但是也可以使用qmake来生成项目文件。 如果要显式设置模式,则必须在所有其他选项之前指定它。 该模式可以是以下两个值之一:

-makefile:qmake输出将是一个Makefile。默认为该模式。

-project:qmake输出将是一个项目文件。他是根据文件中的依赖关系,自动生成一个pro文件,不用自己手写。

3.qmake编译过程

文本程序到可执行文件生成无论在什么平台大致分为以下几个部分:
  1.用编辑器编写源代码,如.c文件。
  2.用编译器编译代码生成目标文件,如.o。
  3.用链接器连接目标代码生成可执行文件,如.exe。
  
  我们知道编译和链接阶段是靠g++和gcc编辑器来完成,这两个编译阶段是相同的,但是链接阶段g++默认链接c++库,所以一般情况下用gcc编译c文件,而g++编译cpp文件。当然g++也可以编译c文件,而gcc编译cpp文件则需要在后面加上参数-lstdc++,作用就是链接c++库。
  
  但是如果编译和链接的阶段如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。
  
  对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist.txt文件,它是cmake所依据的规则。

一般顺序是先创建.pro文件,然后由.pro文件生成Makefile文件,再用make编译并生成可执行文件。

makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模 块及库等)。

创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成 的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定cpp文件的编译来产生特定的obj文件。

用命令行进行Qt编译过程如下:

3.1、生成pro:

使用qmake生成与平台无关的pro文件。
命令:qmake -project

3.2、生成makefike

利用pro文件生成与平台相关的Makefile文件 。Makefile文件中包含了要创建的目标文件和可执行文件、创建目标文件所依赖的文件和创建每个目标文件时需要运行的命令等信息。
命令:qmake

3.3、编译并生成可执行程序

使用make命令完成自动编译,make就是通过读入Makefile文件的内容来执行编译工作的。会为每个源文件生成一个对应的.o文件,最后将目标文件链接生成最终的可执行文件。
命令:make

发布了14 篇原创文章 · 获赞 0 · 访问量 298

猜你喜欢

转载自blog.csdn.net/sksukai/article/details/105346414
今日推荐