尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧:

  • 不是太清楚CONFIG等变量到底如何起作用的
  • 用过的qmake内置变量和函数不超过20个
  • 看Qt Creator源码或者QtSolution等库中自己使用的 *.pro 文件就想看天书一样

本文只能抓住一条线,简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件:干嘛用的,如何用的

*.pro

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

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

TEMPLATE = app
CONFIG += QT
QT += core gui

TARGET = propriprfprl

SOURCES += 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 gui

TARGET = 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

Qt的工程组织-.pro、.pri、.prf、.prl相关推荐

  1. Qt的工程文件(.pro) -- 转

    Qt 工程 pro文件 工作中,感觉pro文件的有些内容真不太懂,现系统性的学习一下.于此备录,分享共勉. 为了更好的理解,先创建一个简单的工程作为实践. [1]创建一个pro文件 1.1 新建pro ...

  2. Qt Creator使用的pro文件格式最终是按照qmake的语法编译的。。。

    分类: Qt 2013-01-17 18:36 441人阅读 评论(0) 收藏 举报 目录(?)[+] qmake指南 从简单易懂的开始 使得程序可调试 添加平台相关的源文件 如果文件不存在停止qma ...

  3. 【QT】详解 *.pro、*.pri、*.prf、*.prl文件

    1.*.pro qmake 的工程(project)文件,这个大家肯定都非常熟悉了.直接上例子: 这是一个典型的Qt示例程序的.pro文件(propriprfprl.pro): TEMPLATE = ...

  4. Qt中使用的工程文件(.pro文件)

    第一种常用方式: #模块设置,一般设置为app(生成应用程序,默认),subdirs(生成makefile文件编译subdirs指定的子文件夹),lib(生成库文件) TEMPLATE = app # ...

  5. QT工程的pro文件详解

    文章目录 QT工程的pro文件解析 简单的Pro文件示例 PRO文件基本配置选项 添加配置选项 常用的配置编译选项 QMAKE 变量操作简介 pro文件引入FFmpeg第三方库 为了在QT工程中添加第 ...

  6. 将vs+Qt的工程从windows平台移植到linux下_

    ​​​​​​​​​​​​将vs+Qt的工程从windows平台移植到linux下_崔杰城的博客-CSDN博客_windows下的qt工程移植到linux下 windows下Qt的开发人员常用vs+Qt ...

  7. 将vs+Qt的工程从windows平台移植到linux下

    windows下Qt的开发人员常用vs+Qt插件进行Qt桌面程序的开发.因为Qt是跨平台的,所以开发完成后如果需要把程序移植到linux下运行,只要把vs的项目工程放到linux下,编译即可.下面介绍 ...

  8. 分享Qt多工程多目录的编译案例,subdirs

    写这篇文章的目的是为了让Qt像VC++那样,支持一个工程包含多个项目.即1个App+多个动态库.本案例以1个App+1个共享库为例: 工程源码我已上传Qt多工程多目录的编译案例_qt子项目编译顺序-C ...

  9. QT Creater工程文件介绍

    Qt Creator工程管理 Qt Creator以工程项目的方式对源码进行管理 一个Qt Craetor工程包含不同类型的文件 .pro项目描述文件 .pro.user用户配置描述文件 .h头文件 ...

最新文章

  1. AI论文代码强制开源?“我反对!”
  2. (转)Engineering Productivity
  3. 服务器堡垒机登录方式
  4. java500主键为空,java – JPA主键值始终为0
  5. Go gin框架:helloworld
  6. Winform控件拖动
  7. [acm]HDOJ 1200 To and Fro
  8. leetcode86. 分隔链表
  9. 将结构体数据存储到一段字符串string中
  10. jQuery无任何标示获取td在表格中的行数和列数
  11. VHDL实现交通灯程序
  12. 关于网站漏洞修复以及处理解决的相关问题解答
  13. request.getParameter();的作用
  14. 钉钉、飞书、企业微信,还没学会赚钱
  15. redis课程视频 黄建宏_求redis从入门到精通视频教程【50讲全】
  16. 借鉴FCoin商业模式,写了一份白皮书去参赛
  17. 拜托,你的这些努力一定要让HR看见!
  18. 计算机频率符号,符号定时和载波频率偏差,Symbol timing and carrier frequency offset,音标,读音,翻译,英文例句,英语词典...
  19. TradingView--自定义技术指标
  20. 企业在线ERP系统与内控控制因素管理

热门文章

  1. css中repeat用法,background-repeat 怎么使用
  2. 中国无线电发射器市场趋势报告、技术动态创新及市场预测
  3. Redis入门指南:深入了解这款高性能缓存数据库
  4. 红轴和茶轴哪个适合游戏 红轴和茶轴哪个手感好
  5. 解决Python3 urllib3 urllib3.exceptions.maxretryerror: httpsconnectionpool(host=‘xxxxx‘, port=443)
  6. vue js 幸运大转盘
  7. “从零到一“基于Freeswitch二次开发:Freeswitch入门与网络架构 (一)
  8. positivessl证书旗下的IP证书
  9. horizon云桌面管理功能说明
  10. vue核心面试题:v-for中为什么要用key