从零开始学Qt – 13:一文读懂Qt项目管理文件(qt项目配置 构建与运行)

从零开始学Qt - 13:一文读懂Qt项目管理文件(qt项目配置 构建与运行)

默认情况下,每个Qt项目都包含一个后缀名为.pro、名称和项目名相同的文件,我们通常称它为项目管理文件或者工程管理文件(简称项目文件)。

项目文件包含由qmake构建应用程序、库或插件所需的所有信息。对于复杂的项目,一个项目中可能包含上百个源文件,Qt编译这些源文件的方法是:先由qmake工具根据pro文件记录的配置信息生成相应的makefile文件,然后执行make命令完成对整个项目的编译。也就是说,pro文件存储的配置信息是用来告知编译器如何编译当前项目的,所以一个Qt项目要想完美运行,既要保证各个源文件中程序的正确性,还要保证项目文件中配置信息的合理性。

对于一个刚刚创建好的Qt项目,pro文件并不是空的,而是包含一些基本的配置信息。实际开发中,Qt会自动修改pro文件的内容,但有时也需要我们手动修改,例如程序中用到某个第三方库时,就需要我们手动修改pro文件。

本文为大家详细地讲解pro文件中各个配置信息的含义,以便于在需要时手动修改pro文件。

一、项目文件的要素

qmake所使用的项目文件格式可用于支持简单和相当复杂的构建系统(build system)。简单的项目文件使用一种直接的声明样式,通过定义标准变量来指定项目中使用的源文件和头文件。复杂的项目可以使用控制流结构(control flow structure)来微调构建过程。

(1)变量

在项目文件中,变量用于保存由字符串组成的列表。在最简单的项目中,这些变量告知qmake关于要使用的配置选项,或者提供要在构建过程中使用的文件名和路径。

qmake在每个项目文件中查找这些变量,并使用这些内容来确定应该写入Makefile的内容。例如,HEADERS和SOURCES中的值表示与项目管理文件在同一目录中的头文件和源文件。

变量还可以在文件内部用于存储临时的值列表,并且现有的值列表可以用新的值进行覆盖或扩展。

下面的语句说明了如何将值赋值给变量:

HEADERS = mainwindow.h paintwidget.hSOURCES = main.cpp mainwindow.cpp paintwidget.cpp

变量中的值通过以下方式进行扩展:

CONFIG = console

下表列出了一些常用的变量,并对其进行了简要描述。本文后面会对一些变量进行专门介绍。

变量

说明

CONFIG

一般项目配置选项

DESTDIR

指定生成的应用程序放置的目录

TARGET

指定目标文件名。如果不设置,目标名会被自动设置为跟项目文件一样的名称。

FORMS

用户界面编译器(uic)要处理的UI文件列表

UI_DIR

指定uic命令将.ui文件转化成ui_*.h文件的存放的目录

HEADERS

构建项目时使用的头(.h)文件的文件名列表

QT

在项目中使用的Qt模块的列表

RESOURCES

要包含在最终项目中的资源文件(.qrc)的列表

RCC_DIR

指定rcc命令将.qrc文件转换成qrc_*.h文件的存放目录

SOURCES

构建项目时要使用的源代码文件列表

TEMPLATE

要用于该项目的模板。这个决定了构建进程的输出是应用程序、库还是插件。

INCLUDEPATH

头文件包含路径

OBJECTS_DIR

指定目标文件(obj)的存放目录

MOC_DIR

指定moc命令将含Q_OBJECT的头文件转换成标准.h文件的存放目录

DEPENDPATH

程序编译时依赖的相关路径

CODECFORSRC

源文件编码方式

LIBS

引入的lib文件的路径

一个变量的内容可以通过用$$附加该变量名来读取。这可以用来将一个变量的内容赋值给另一个变量:

TEMP_SOURCES = $$SOURCES

$$操作符被广泛地用于对字符串和值列表进行操作的内置函数。

(2)空格

通常在赋值语句中,空格被用来分隔变量值。要指定包含空格的一个值,必须将这些值用双引号括起来:

DEST = "Program Files"

类似的方法也用于处理包含空格的路径,特别是在为Windows平台定义INCLUDEPATH路径和LIBS变量时:

win32:INCLUDEPATH = "C:/mylibs/extra headers"unix:INCLUDEPATH = "/home/user/extra headers"

(3)注释

你可以向项目文件中添加注释。注释以#字符开始,并持续到同一行的末尾。例如:

# Comments usually start at the beginning of a line, but they# can also follow other content on the same line.

要在变量赋值中包含#字符,必须使用内置的LITERAL_HASH变量的内容。

(4)内置函数和控制流程

qmake提供了许多内置函数来处理变量的内容。在简单的项目文件中,最常用的函数是include()函数,以一个文件名作为一个参数。给定文件的内容将被包含在项目文件中使用include函数的位置。include函数最常用于包含其他项目文件:

include(other.pro)

对条件语句的支持是通过类似编程语言中的if语句的范围(scopes)提供的:

win32 { SOURCES = paintwidget_win.cpp}

只有当条件为真时,才会进行大括号内的赋值操作。在上面的语句中,必须将CONFIG设置为win32,才会执行SOURCES赋值,这在Windows上是自动进行的。第一个括号{必须与条件在同一行。

对于需要进行循环操作的变量,通常使用内置函数:find()、unique()和count()等等。这些函数可以用于操作字符串和路径、支持用户输入和调用外部工具。有关使用这些函数的更多信息,请参见qmake语言。

二、项目模板(TEMPLATE变量

TEMPLATE变量用于定义要构建的项目的类型。如果没有在项目文件中声明,qmake假设应该构建一个application应用程序,并将为此生成适当的Makefile(或等效文件)。 下表总结了可用的项目类型,并描述了qmake将为每个项目生成的文件:

模板

qmake输出

app (缺省)

构建应用程序的Makefile

lib

构建库(library)的Makefile

aux

不构建任何东西的Makefile。如果不需要调用编译器来创建目标,则可以使用此方法。

subdirs

生成makefile文件编译subdirs指定的子文件夹

vcapp

建立一个应用程序的VisualStudio项目文件

vclib

建立一个库的VisualStudio项目文件

vcsubdirs

VisualStudio解决方案文件,用于在子目录中构建项目

当使用subdirs 模板时,qmake生成一个Makefile来检查每个指定的子目录,处理子目录中包含的任何项目文件,并在新创建的Makefile上运行平台的make工具。SUBDIRS 变量用于包含要处理的所有子目录的列表。

三、CONFIG变量

指定项目配置和编译器选项。这些值可以被qmake在内部识别,部分选项的说明如下。

标识名称

说明

release

应用程序将以release模式生成。如果“debug”被指定,它将被忽略

debug

应用程序将以debug模式生成

warn_on

编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。

warn_off

编译器会输出尽可能少的警告信息。

qt

应用程序是一个Qt应用程序,并且Qt库将会被链接。

thread

应用程序是一个多线程的应用程序

windows

只用于“app”模板:应用程序是一个Windows下的窗口应用程序

console

只用于“app”模板:应用程序是一个Windows下的控制台应用程序

dll

只用于“lib”模板:库是一个共享库(dll)

staticlib

只用于“lib”模板:库是一个静态库

plugin

只用于“lib”模板:库是一个插件,这将会使dll选项生效

四、声明Qt库(QT变量)

通过QT变量,可以声明所需的扩展模块。例如,我们可以通过以下方式启用XML和网络模块:

QT = network xml

注意:默认情况下,QT包括core和gui模块,所以上面的声明将network和XML模块添加到这个默认列表中。以下赋值省略了默认模块,这将在编译程序时出现错误:

QT = network xml # 这将忽略core和gui模块

如果您想构建一个没有gui模块的项目,那么需要使用“-=”操作符来排除它。默认情况下,QT同时包含core和gui,所以下面这一行将导致构建一个最小的QT项目:

QT -= gui # 只包含了core模块

五、声明其他库

如果除了使用Qt提供的库之外,还在项目中使用其他库,则需要在项目文件中指定它们。通过LIBS变量,可以指定qmake要搜索的库和要链接的特定库的路径。例如,

LIBS = -L/usr/local/lib -lmath

包含头文件的路径也可以使用INCLUDEPATH 变量以类似的方式指定。 例如,要添加多个要搜索头文件的路径:

INCLUDEPATH = c:/msdev/include d:/stl/include

更具体的项目文件信息,可以参考Qt的帮助文件。

觉得有用的话,希望大家多多关注评论转发赞,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年8月28日 上午9:30
下一篇 2022年8月28日 上午9:44

相关推荐

  • 一建项目管理重点总结

    一建项目管理重点总结 一建项目管理是建筑行业的重要组成部分,是项目经理和团队成员集中精力,确保项目按时完成、高质量交付的关键。本文将总结一建项目管理的重点,帮助项目经理和团队成员更…

    科研百科 2024年5月23日
    60
  • 北京大学科研项目何峰北京大学科研项目何峰

    北京大学科研项目何峰 何峰是一位北京大学的教授,他参与了多项科研项目,并且取得了显著的成绩。他的研究兴趣包括人工智能,机器学习,自然语言处理和数据挖掘等方面。 何峰教授的研究成果之…

    科研百科 2024年6月12日
    63
  • 国家铁路局重大科技成果发布(国家铁路局2024年科研项目)

    国家铁路局2024年科研项目 随着中国经济的快速发展和铁路交通的不断完善,国家铁路局在2024年将继续推出一系列重大科研项目,推动铁路交通的科技创新和转型升级。 此次科研项目的重点…

    科研百科 2024年4月3日
    134
  • 成都市全生命周期管理平台

    成都市全生命周期管理平台 随着人口老龄化趋势的不断加剧,人们对于健康、养老、医疗等方面的需求也越来越高。为了解决这些问题,成都市政府推出了一套全新的全生命周期管理平台,旨在通过信息…

    科研百科 2024年10月1日
    23
  • 全国路政宣传月

    全国路政宣传月即将来临,这是一个让人们了解路政、支持路政、参与路政的重要时机。作为我国交通管理部门的重要组成部分,路政部门在保障道路安全、维护交通秩序、保护人民生命财产安全方面发挥…

    科研百科 2024年11月13日
    0
  • 哪个项目管理系统好

    项目管理系统是项目管理中不可或缺的工具,可以提高项目管理的效率和精度,帮助团队更好地协作。目前市面上有很多优秀的项目管理系统,选择合适的系统需要考虑多个因素,例如系统的功能、易用性…

    科研百科 2024年7月14日
    50
  • 科研项目工作台账表格模板下载(科研项目工作台账表格模板)

    科研项目工作台账表格模板 科研项目工作台账表格模板是一种用于记录科研项目进度和成果的表格,可以帮助项目管理人员更好地跟踪项目进展和掌握项目状态。以下是一个基本的科研项目工作台账表格…

    科研百科 2024年4月10日
    327
  • 分享今天学习“流程设计的宗旨”,为客户服务。

    分享:今天学习“流程设计的宗旨”,为客户服务。分享:今天学习“流程设计的宗旨”,为客户服务。我们从事的工作,都是在应试教育下,独自做试卷、开始做证明。过去的线上课程,没有现场教学,…

    科研百科 2024年11月20日
    0
  • Tita – 如何进行矩阵式项目管理?(矩阵式项目管理模式)

    企业中通常会有两种协作关系,一种是最常见的上下级协作关系;第二个是跨部门协作。矩阵式项目管理可以灵活分配人力和资源,可以适应不断变化的外界要求,可以最大化的利用现有资源。然而这种情…

    科研百科 2024年4月24日
    60
  • 医院2024年上半年党建工作总结

    医院2024年上半年党建工作总结 尊敬的领导、各位同事: 时光荏苒,转眼间2024年上半年党建工作已经接近尾声。在过去的半年里,我们围绕“以患者为中心”的理念,积极探索党建工作新方…

    科研百科 2024年10月30日
    0