首页 > 编程笔记 > Qt笔记 阅读数:318

使用qmake工具提升效率

第一个Qt程序》中使用的编译命令还是比较简单的,而《一个稍微复杂的Qt程序》中使用的编译链接命令已经开始多起来了,还得先用 moc 工具生成元对象系统代码。这些还都是简单代码,如果项目里文件增多,自己敲命令当然复杂了,因此 Qt 开发了自己的项目构建工具——qmake。

qmake 工具有两种工作模式,它首先根据项目文件夹的头文件、源文件、图形界面文件、资源文件等,生成标准的 .pro 项目文件。然后使用第二种工作模式,qmake 可以根据 .pro 文件自动生成 Makefile 文件,我们就只需要运行一下 make 就行了,这就让 Qt 程序的项目管理和构建生成变得轻松加愉快。

我们以《一个稍微复杂的Qt程序》中的例子示范 qmake 的简单使用过程。在使用 qmake 之前,把之前生成的临时文件 moc_MyMainWindow.cpp、*.o 和 *.exe 都删了,保留手动编写的一个 .h 和两个 .cpp 文件就够了。

1) 进入文件夹

打开 Qt 命令行工具,进入代码所在文件夹:

cd /d D:\QtDemo

2) 生成项目文件

用 qmake 生成项目文件:

qmake -project "QT+=widgets"

-project选项指明使用第一种工作模式,它会扫描当前文件夹里的各种文件,然后生成对应的 .pro 文件。

"QT+=widgets"是我们针对 Qt5 自定义的一行文本,qmake 会把它添加到 .pro 文件里。qmake 默认会将 QtCore、QtGui 模块添加到项目文件里,但是从 Qt4 发展到 Qt5 后,将 QtWidgets 模块从 QtGui 里面分离出来了,新的 QtWidgets 模块不会自动添加,所以我们手动在命令里添加了 QtWidgets 模块,即在 .pro 文件里添加一句QT+=widgets

执行上面命令之后,在 D:\QtDemo 文件夹里会出现一个自动命名的 QtDemo.pro。该 .pro 文件具体内容等会分析,我们先生成可执行程序看看。

3) 生成 Makefile 文件

用 qmake 生成 Makefile:

qmake

qmake 不带任何选项就是默认工作在第二种模式,它会扫描项目文件 QtDemo.pro,自动生成 Makefile 文件。

执行这条命令后,项目文件夹里会多出来这些内容:debug 和 release 两个文件夹,以及 Makefile、Makefile.Debug 和 Makefile.Release 三个文件。

Makefile 是总的生成脚本文件,Makefile.Debug 用于生成可调试的目标程序,而 Makefile.Release 用于生成优化发行版的目标程序,总的脚本 Makefile 会根据不同的 make 命令生成相应的调试版或优化发行版程序。

debug 文件夹是存储编译过程中的临时文件和可执行程序,这个是对于调试版程序。release 文件夹是也是类似的,但它是存储优化发行版的可执行程序。

4) 生成可执行程序

调用 make 工具生成可执行程序:

mingw32-make

MinGW 的生成工具是 mingw32-make,该命令执行之后,默认生成的是 release 版可执行程序,在 release 文件夹里。

如果想手动指定生成 debug 版本目标程序,可以执行命令:

mingw32-make debug

如果手动指定生成 release 版本目标程序,可以执行命令:

mingw32-make release

如果希望同时生成 debug 和 release 两种版本程序,就执行:

mingw32-make all

执行这些命令后,可以在 debug 文件夹里看到调试版的目标程序,在 release 文件夹里看到优化发行版的目标程序,这两个文件夹里还有生成目标程序过程中的一些中间产物,如 moc_hellowidget.cpp、*.o 等。

我们在使用 qmake 构建程序的过程中,就不需要自己使用 moc 工具为 Qt 类生成元对象系统代码了,因为 qmake 自动将 moc 工具命令放在 Makefile 里面,在构建程序时会自动处理,帮程序员省了许多事。以后章节里还有 uic 、rcc 等工具也会自动在 Makefile 里调用,这是 qmake 工具的方便之处。

5) 运行可执行程序

还在刚才的 Qt 命令行里,如果要执行调试版目标程序:

debug\QtDemo.exe

如果要执行优化发行版程序:

release\QtDemo.exe

运行效果和之前小节的差不多,就不截图了。对于 Linux 系统,文件路径的分隔符是 / ,并且在 Linux 里的生成工具就是 make,比 mingw32-make 名字简短。

分析 QtDemo.pro 文件

接下来我们看看 QtDemo.pro 文件里的内容:

######################################################################
# Automatically generated by qmake (3.1) Tue Jun 4 15:59:41 2019
######################################################################

QT+=widgets
TEMPLATE = app
TARGET = QtDemo
INCLUDEPATH += .

# The following define makes your compiler warn you if you use any
# feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

# Input
HEADERS += MyMainWindow.h
SOURCES += main.cpp MyMainWindow.cpp

文件里井号打头的都是注释,可以忽略掉。文件里实际起作用的就只有七句。

1) 第一句:

QT+=widgets

是我们在 qmake 命令里面指定添加的 QtWidgets 模块(即 widgets),因为隐藏包含了 QtCore(即 core)和 QtGui(即 gui),所以不用手动添加 core 和 gui。

2) 第二句:

TEMPLATE = app

这代表生成的目标程序类型模板,app 是可执行的应用程序,另外还可以生成静态库和动态库、插件等等。一般大部分的模板都是 app 应用程序。

3) 第三句:

TARGET = QtDemo

TARGET 指定目标程序的名字,在 Windows 系统里就是 QtDemo.exe,在 Linux 系统里可执行程序不需要扩展名,直接就叫 QtDemo。

4) 第四句:

INCLUDEPATH += .

这句是将当前目录.添加到了包含路径(INCLUDEPATH)里,程序编译时除了从 Qt 库的包含路径,还会从当前目录里寻找头文件,比如 MyMainWindow.h 就在当前文件夹里。至于 Qt 库的包含路径,qmake 自己默认就会添加,不需要我们操心的。

5) 第五句:

DEFINES += QT_DEPRECATED_WARNINGS

当我们使用已被官方抛弃的 Qt 功能(语法、类、函数等)时,编译器会给出警告。

6) 第六句:

HEADERS += MyMainWindow.h

HEADERS 就是指定项目里的头文件。

7) 第七句:

SOURCES += main.cpp MyMainWindow.cpp

SOURCES 就是指定项目里的源代码文件。以后还会学到图形界面文件和资源文件等,本节只需要头文件和源代码文件。

可以看出 pro 文件的语法是很简洁明了的,认识点英文,猜都能猜到大致的意思是什么。

注意文件里语句既有=,也有+=,这两个的意义和 C++ 语法类似:=是赋值,左边的变量会被指定为右边的值,并且仅仅是右边的值;+=是追加的意思,因为 qmake 会给一些变量默认添加 Qt 内置的一些值(如 Qt 库的包含路径),这些值是必需的,不能被取代,所以要用追加模式。

pro 文件可以通过 qmake 生成,或者手动编写 pro 文件也行。qmake 又可以按照 pro 文件的内容生成 Makefile,然后使用 make 构建目标程序。pro 文件是非常关键的项目管理和控制项目生成的文件,集成开发环境 QtCreator 就是采用 pro 文件管理和生成项目的,以后我们会大量接触 pro 文件。

爱面试的程序媛,一个分享面试经验的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,定时分享程序员面试的那点事。

面试如何造火箭?工作如何拧螺丝?都在这个公号哦。

扫描二维码关注公众号,免费领取价值 1000 元的求职面试资料(限时免费)!

当你决定关注「爱面试的程序媛」,你已然超越了90%的程序员!

爱面试的程序媛二维码
微信扫描二维码关注

所有教程

相关文章