Qt 中的项目文件(.pro)

因为要使用一个 C++ 库,但是又不想在终端环境下直接操作,便想要借助 Qt 这个工具,但是实际使用的时候却出现了一些错误,查证之后是某些头文件和库文件没有添加,虽然问题最终都解决了,但是还是把这过程中看到的资料写一下,防止忘记。

qmake

Qt 为我们提供了一个用于管理项目构建的工具,该工具就是 qmake。利用该工具可以控制所使用到的各种源文件,还可以将每个项目文件中的信息扩展为 Makefile,并执行编译和链接。

如果是使用 Qt creator 的新建项目向导建立的模板项目,并且过程中没有使用到任何第三方的东西,那么在敲完代码之后,直接编译运行就搞定了。但是如果使用到了某些第三方工具或是要对项目模板做出某些更改,就需要对项目文件(.pro)进行操作了。

什么是项目文件

  • 项目文件就是 Qt 项目中的那个以 .pro 结尾的文件
  • 项目文件通常包含源文件、头文件、常规配置信息以及特定应用程序的详细信息的列表
  • 项目文件可以包含许多不同的元素,包括注释、变量声明、内置函数和一些简单的控制结构
  • 利用项目文件也可以为复杂项目创建更复杂的项目文件

其实上边说的这些可能一时之间不是太能理解,但是实际编过代码,看过pro文件内容之后就差不多理解了。

项目文件中的元素

其实项目文件主要是为 qmake 铺桥搭路的,其实有点类似于 cmake 中的 CMakeLists.txt 文件。如果知道 cmake 的话,可以将两者对比着来看。qmake 中的项目文件中存在不同的元素。

变量

  • 在项目文件中,变量用于保存字符串列表。
  • qmake 查找所有的项目文件变量,并使用这些变量内容来确定写入 Makefile 文件的内容。
  • 变量也可以在内部使用,用来存储临时值列表,并且现有值列表可以用新值覆盖或扩展。

值列表的变量赋值为:

HEADERS = mainwindow.h paintwidget.h

常见的变量及其描述为:

变量名

描述

CONFIG

生成项目配置选项

DESTDIR

可执行文件或二进制文件的存放位置

FORMS

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

HEADERS

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

QT

项目中使用的Qt模块列表

RESOURCES

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

SOURCES

建立项目时使用的源文件列表

TEMPLATE

项目使用的模板。该变量决定构建输出结果是应用程序、库或是插件

变量的内容可以通过前加 “$$” 来读取。这可用于将一个变量的内容赋值给另一个:

TEMP_SOURCES = $$SOURCES

空格

通常情况下,对变量进行赋值时,用空格来分割值。如果指定值中包含空格,就需要使用双引号:

DEST = "Program Files"

该形式一般用来处理包含空格的路径,尤其是 windows 平台下的 INCLUDEPATH 和 LIBS 变量。

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

注释

在项目文件中可以添加注释,注释以“#”开头直到该行末尾。例如:

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

如果变量赋值中包含字符#,就需要使用内建变量 LITERAL_HASH。

内置函数

qmake 提供了许多内置nei函数来启用要使用的变量内容。如函数 include() 以文件名为参数,使给定文件的内容包含在使用函数 include() 的项目文件中:

include(other.pro)

内置函数还有很多,分别有不同的作用,具体的可以查看官方手册。

控制流

控制流有点类似与编程语言中的分支结构,可以实现不同条件下的控制。而项目文件中是以作用域实现的:

win32 {
    SOURCES += paintwidget_win.cpp
}

上述代码仅当条件为真时,才进行大括号内的赋值。也就是当 win32 存在才执行大括号中的语句。要注意的是左大括号必须与条件同行。

几个简单实例

利用 CONFIG 变量指定项目配置的选项和功能:

CONFIG += qt release

利用 QT 声明所需的扩展模块:

QT += network xml

配置功能

可以使用功能(.prf)文件中指定的其他配置功能来设置 qmake。这些额外的功能通常为在构建过程中使用的自定义工具提供支持。要将功能添加到构建过程中,需要将功能名称(功能文件名的词干)附加到CONFIG变量中。如利用pkg-config支持的外部库 bus 和 ogg:

CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1

利用 LIBS 和 INCLUDEPATH 指定第三方库

LIBS += -L/usr/local/lib -lmath
INCLUDEPATH = c:/msdev/include d:/stl/include

其它的 *.pr* 文件

.pro 文件之前已经简单说过了,其实只要知道这个文件是什么,里边的结构是什么样子的。在具体构建项目的时候对应参数进行设置就可以了。如果要记忆的话,里边的参数真的是有点多。

其实除了 .pro 文件之外,还能把该文件中的某一部分单独拿出来,从而形成了其它的 *.pr* 文件。

.pri

  • i 是 include 的首字母。
  • 对于简单项目,可能只需要一个 .pro 文件就够了,因为总共也没有多少东西。
  • 但是对于大项目来说,要进行很多设置,此时我们可以把其中的一部分拿出来,单独成为一个文件
  • 然后用之前提到的内置函数 include() 包含

也就是说我们的 .pro 文件中会有这么一句话:

include(priname.pri)

.prf

  • 我们在简单实例中提到过 “配置功能”,其中功能对应的单词是 feature,而 .prf 中的 f 正是 feature 的首字母
  • 该文件也是需要包含进 .pro 文件的
  • 一般情况下,利用 CONFIG 变量配置的就是 .prf
  • 每次利用 CONFIG 变量添加配置的时候,都会从固定目录加载对应的 .prf 文件
  • features 文件名必须小写
  • features 所在的目录为 $$QTDIR/mkspecs/features
  • 然后用 CONFIG 变量或是内置函数 load 加载

也就是说我们的 .pro 文件中会有这么一句话:

CONFIG += prfname

或是:

load(prfname)

.prl

  • .prl 中的 l 表示的是 link 的首字母
  • 也就是说,.prl 主要和库的生成和使用有关

如果要生成静态库,就需要配置:

CONFIG += create_prl

之后就会生成和库同名的 .prl 文件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值