*.pro

qmake 的工程(project)文件,这个大家肯定都非常熟悉了。那我就不费话了,上例子:

这是一个典型的Qt示例程序的.pro文件(propriprfprl.pro):

TEMPLATE = app
CONFIG += QT
QT += core guiTARGET = propriprfprlSOURCES += main.cpp/widget.cpp
HEADERS  += widget.h
FORMS    += widget.ui
  • 前面3行是qmake的默认值,我们都可以省略
  • TARGET 这行指定工程名,我们也可以省略

*.pri

i 是什么东西?包含(include)的首字母。类似于C、C++中的头文件吧,反正就是我们可以吧 *.pro 文件内的一部分单独放到一个 *.pri 文件内,然后包含进来。

接前面的例子,我们将源文件的设置独立出来,放到propriprfprl.pri文件内:

SOURCES += main.cpp/widget.cpp
HEADERS  += widget.h
FORMS    += widget.ui

这时,我们的 propriprfprl.pro 文件就可以简化为:

TEMPLATE = app
CONFIG += QT
QT += core guiTARGET = propriprfprl
include(propriprfprl.pri)
  • 这有什么用呢?对我们这个例子来说,确实没什么用,反而多了一个文件,更麻烦了。
  • 可是,如果一个大点的项目,含有多个*.pro文件呢,这些pro需要有些共同的设置或需要的文件,这时就很有必要了。

*.prf

f又是神马东东?特性(feature)的首字符

  • 和pri文件类似,该文件也是要被包含进pro文件的
  • 只是:它更隐蔽
  • 你经常和它打交道,可能却一直视而不见

我们这个例子中其实已经用到了,这就是

CONFIG+=QT

当我们在CONFIG中指定一个东西时,qmake就会尝试去加载相应的feature文件:

  • Qt安装目录下的 mkspecs/features/qt.prf
  • features 文件的文件名必须小写
  • qmake 去哪些目录下搜索features文件呢?
    • manual中有介绍,此处略
    • 暂时只知道前面提到的 $$QTDIR/mkspecs/features 就可以了

写一个自己的features文件:propriprfprl.prf

win32:CONFIG += console
  • 为win32的程序添加控制台,有点多次一举哈。
  • 将该文件放置到我们前面提到的目录中

然后在pro文件内添加

CONFIG += propriprfprl

看到和 CONFIG += console 同样的效果了吧?

注:我们也可以使用 load命令来加载prf文件,比如前面的命令可以认为等价于

load(propriprfprl)

*.prl

l 这个东西容易理解,链接(link)的首字符。主要和生成与使用静态库密切相关(动态库也可以有该文件,去Qt安装目录下的lib目录下看看即可)。

  • 生成静态库时,我们需要使用下列配置(进而生成和库文件同名的 *.prl 文件)
CONFIG += create_prl
  • 当工程的TEMPLATE为app时,会自动添加如下指令(找库文件的时候,会尝试找相应的 *.prl 文件)
CONFIG += link_pri

那么该文件有什么用处呢?举一个大家可能熟悉的例子QextSerialPort1.2这个库(windows下的情况):

  • 编译时,需要 setupapi.lib advapi32.lib user32.lib 这几个库文件
  • 编译成静态库以后,它本身是不包含这3个库文件信息的
  • 于是,当我们使用这个 QextSerialPort 静态库,还是需要指定 这几个库文件

如果有prl文件呢,该文件就会包含依赖信息了,我们看一下:

QMAKE_PRL_BUILD_DIR = E:/dbzhang800-qextserialport/buildlib
QMAKE_PRO_INPUT = buildlib.pro
QMAKE_PRL_TARGET = qextserialport-1.2
QMAKE_PRL_CONFIG = include_source_dir incredibuild_xge lex yacc warn_on uic resources incremental_off windows release ReleaseBuild Release build_pass qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe stl exceptions rtti mmx 3dnow sse sse2 release ReleaseBuild Release build_pass qt qextserialport-buildlib create_prl qextserialport-uselib qextserialport-static static debug_and_release build_all release ReleaseBuild Release build_pass no_autoqmake staticlib static moc thread
QMAKE_PRL_LIBS = setupapi.lib advapi32.lib user32.lib d://Qt//4.7.0//lib//QtGui4.lib d://Qt//4.7.0//lib//QtCore4.lib 

参考

  • qmake manual:qmake-advanced-usage.html
  • qmake manual:qmake-variable-reference.html
  • http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake

QT——简单介绍 *.pro、*.pri、*.prf、*.prl四种文件相关推荐

  1. 简单谈谈OAuth 2.0的四种认证方式

    简单谈谈OAuth 2.0的四种认证方式 一.基本认识 1.1 OAuth认证中的四种角色 二.认证方式 2.1 授权码认证 2.2 简化认证 2.3 密码认证 2.4 客户端认证 一.基本认识 在小 ...

  2. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  3. ⅰcp经济模型_简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  4. 【Qt】Qt多线程开发—实现多线程设计的四种方法

    Qt-使用Qt实现多线程设计的四种方法 文章目录 Qt-使用Qt实现多线程设计的四种方法 一.写在前面 二.[方法一] QThread:带有可选事件循环的底层API 三.[方法二] QThreadPo ...

  5. 微信小程序开发的四种文件

    最近在弄一个微信小程序,将看到的内容记录一下: 微信小程序中就四种类型的文件: js ---------- JavaScrip文件 json -------- 项目配置文件,负责窗口颜色等等 wxml ...

  6. hive的四种文件存储格式

    hive分为四种存储格式: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE 在其中textfile为默认格式,如果在创建hive表不提及,会默认启动textf ...

  7. QT模块化编程 pro pri 子工程 使用

    如果工程过大时,就需要分子模块,Qt 也给我们提供了一种方式 Pri: 这里我们来看看Pri在项目中的使用,项目使用实际上也是很有主要可以模块清晰化,能提高程序的可扩展性. 网上这种写的很多,但少有写 ...

  8. Redmi 10X Pro 5G曝光:四种配色、两种存储版本可选

    [TechWeb]5月17日,据外媒报道,新款Redmi 10X将拥有多个版本供消费者选择,除了4G/5G版外,还拥有Pro版本,性能更为强劲. 据报道,Redmi 10X 4G版在配色上有白色.天蓝 ...

  9. 简单介绍MySQL开启事务的两种方式

    本篇文章给大家分享MySQL 是如何开启一个事务的,原文通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 方式 1 START TRANSACTION 或 ...

最新文章

  1. 小而美的个人博客——前端——tags
  2. 训练自己haar-like特征分类器并识别物体(1)
  3. JVM:永久代 以及jdk1.8为什么将其移除?
  4. cmd编译运行Java文件详解
  5. vs code linux opencv,ubuntu+vscode 测试运行opencv
  6. 各种门锁的内部结构图_便宜超好用:小米智能门锁 E上手体验报告
  7. Python标准库base64用法简介
  8. php如何控制用户数,PHP统计当前在线用户数实例讲解
  9. [转载] 使用openpyxl模块向Excel中插入图片
  10. 基于无线传感器网络LEACH算法的改进
  11. 小写和大写开头的英文名字  internet 和Internet在意思上有何重要区别?
  12. android手机微信收藏功能实现,微信小程序实现收藏功能
  13. VEH帮你定位程序崩溃地址
  14. 计算机时间校对更改原因,计算机时间校准方法
  15. 28. 尚融宝借款额度审核
  16. android 系统中静音后使得音量减键不能解除静音
  17. 别翻了,Lambda 表达式入门,看这篇就够了
  18. scala简介 什么是Scala?
  19. 基于html+css+js的图书管理系统
  20. xgboost 参数 scale_pos_weight 详解

热门文章

  1. vue图片预览插件,支持鼠标缩放:useful-photo-preview
  2. linux 垂直同步,垂直同步有什么用
  3. 10条可视化设计法则,3分钟教你设计出好的可视化作品
  4. react 解决警告Warning: Each child in a list should have a unique “key” prop.
  5. 【Electron】vue+electron代码签名(mac篇)
  6. 【原创 HadoopSpark 动手实践 11】Spark Streaming 应用与动手实践
  7. 快速说唱教学第四期:什么是punchline?说唱里面的玩梗是这么样的?
  8. Emiya家今天的饭
  9. synopsys的rm流程_synopsys设计流程
  10. 全志A33,单独编译内核方法