Qt pro pri 文件解析

http://blog.csdn.net/cloud_castle/article/category/2123873   Qt5官方demo解析集


本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873

让我们把.pro和.pri放在一起看:

analogclock.pro:

  1. include(../rasterwindow/rasterwindow.pri)  
  2.   
  3. # work-around for QTBUG-13496  
  4. CONFIG += no_batch  
  5.   
  6. SOURCES += \  
  7.     main.cpp  
  8.   
  9. target.path = $$[QT_INSTALL_EXAMPLES]/gui/analogclock  
  10. INSTALLS += target  


rasterwindow.pri:
  1. INCLUDEPATH += $$PWD  
  2. SOURCES += $$PWD/rasterwindow.cpp  
  3. HEADERS += $$PWD/rasterwindow.h  
好像是第一次讲Qt的pro文件,其实我们很有必要理清这个小小的pro文件到底带给了我们什么东西,我们一句一句看:

首先,pri是什么,简单来说,可以理解为(project include),即包含工程。在做实际项目的时候,大多数情况下我们用到的类可能并不是自己写的,而是以打包(文件夹)的形式拿过来,并且,所有的文件都放在一个目录似乎也难以维护。那么我们创建一个pri文件,并在pro中include它就好了,而include(../rasterwindow/rasterwindow.pri)将被展开成pri文件中的内容。(../是什么?一个"."是当前目录,两个"."是上级目录)另外,Qt中还有.prf和.prl文件,具体可参考<浅谈 qmake 之 pro、pri、prf、prl文件>


那么$$PWD又是什么呢?在qmake工程文件中,我们可以利用$$var来取一个变量var的值,这里的PWD就是当前目录的绝对路径了。

OK,现在我们把.pri文件中的内容在.pro中展开,第二句我们又糊涂了,CONFIG += no_batch似乎是为了解决QTBUG-13496这个Bug存在的。那如果我们想知道这个Bug是什么,帖这段网址去看看https://bugreports.qt-project.org/browse/QTBUG-13496。Qt官方对这个Bug是这么描述的:nmake gives a wrong source file to the compiler

然后在下面一般会有合适的解决方案。


$$[QT_INSTALL_EXAMPLES],这里的QT_INSTALL_EXAMPLES是Qt配置选项的值,它不是一个变量,是你装好Qt以后就定好的一个值,这里是你Qt官方demo的顶层绝对路径。有关qmake的各项参数,具体可以参考<qmake 乱乱乱谈(一)>


既然谈到了pro文件,Qt += XXX不得不谈,既然要编译程序,无非就是预处理、编译和链接,编译预处理要展开我们的宏,展开包含的头文件,链接时呢,我们需要链接器能找到我们的库。

Qt在pro文件中实际上默认省略了两句话 CONFIG += qt 和 QT += core。第一句话告诉qmake,你可以到$QTDIR/include目录下去找头文件。当然,因为这个目录下都是文件夹,qmake找不到实际的头文件。然后它又告诉qmake,“我们的库文件路径在$QTDIR/lib里面~”。

第二句话QT += core就细分了,它告诉qmake,头文件路径可以向下一层,即$QTDIR/include/QtCore。链接需要的库呢,指定了一个QtCore4.lib。并定义宏QT_CORE_LIB

我们可以在QtCore文件夹里找到我们熟悉的QString,这就是我们在编写小程序用到QString却不需要#include<QString>的原因。


好,我们现在来理一下这个思路。QT += XXX 实际上是为我们指明了一个路径。如果我们没有在pro文件中添加 QT += network ,然后#include<QTcpSocket>出现什么情况?有个波浪线出来了吧,提示是,“QTcpSocket:没有这个文件或目录”。这就是因为在Qt在include目录下找不到名为QTcpSocket的文件或者目录。

那好说啊,我们这样#include<QNetwork/QTcpSocket>不就能找到了吗?是的,可以看到波浪线没了,说明这个头文件确实能被找到,但是别忘了QT += XXX还提供了我们在链接时需要用到的库。如果在单步编译这个Qt程序的话,可以看到编译过了,程序会在链接时报错。


Qtpro pri是一种源代码管理规范,是为了更加方便、灵活地管理大型项目的源代码而设立的。Qt是一个跨平台的C++应用程序开发框架,具有易于使用、可扩展、高兼容性等特点,被广泛应用于各种类型的软件开发中。而Qtpro pri则是基于Qt框架的多个.pro文件和一个.pri文件进行的项目管理规范。 在Qtpro pri模式下,每个子模块都有一个单独的.pro文件,而主模块则有一个.pri文件,主要用于存储所有的子模块的依赖关系和链接库信息。通过这种方式,可以实现模块化的编程方式,降低了各个模块之间的耦合度,提高了代码的可重用性和可维护性。 Qtpro pri的项目管理规范,有以下几个优点: 1、方便管理:通过多.pro和一个.pri文件的方式管理项目,非常便于管理和维护大型的项目,尤其是对于代码库有多个开发人员同时参与开发的情况下,有助于降低开发成本和提高整体开发效率。 2、模块化编程:将程序拆分成不同的模块,各个模块之间相对独立,互相之间不会影响,同时也方便代码的重用和维护。 3、可扩展性:在Qtpro pri下,可以轻松地添加或删除子模块,通过维护.pri文件的依赖关系,子模块的变动不会对主模块产生重大影响,而且管理起来更加灵活和可扩展。 总之,Qtpro pri的优势在于易于管理,方便扩展和维护,同时也可以实现代码的模块化,减少了代码的耦合度,提高了代码的可读性和可维护性,因此被广泛应用于各种类型的软件开发中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值