Qt小技巧15.Pro文件的床边故事

1 引言

这篇文章很简单,小结下Pro文件的那些好用但是又不常用的功能,用好了Pro文件,对开发人员来说那是大有裨益,身体倍儿棒。

2 说正事

2.1 定义一个字符串宏

例如我想定义一个宏,这个宏是用来描述软件版本的字符串,在Pro文件中定义后就可以在任意地方使用了,统一管理,十分方便。

qDebug() << APP_VERSION;  //输出:V1.0.0

2.2 判断模块是否存在

有时候Pro文件引用了一个不存在的模块,会报如下错误:

Project ERROR: Unknown module(s) in QT

其实Pro文件有相关函数对模块的存在进行判断的:

qtHaveModule(printsupport): QT += printsupport
qtHaveModule(opengl): QT += opengl

意思大家应该一看就懂,这样有个好处,只加载当前存在的模块,不存在就略过啦。
还有一点,这里以opengl模块为例,如果工程引用了该模块,则在代码中就可以通过一个宏决定是否编译代码:

#ifdef QT_OPENGL_LIB
    //todo
#endif

2.3 构建静态库

win下会生成lib静态库,很是简单:

TEMPLATE = lib
CONFIG += staticlib c++11

2.4 构建子项目

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += src examples

这里的话会先构建src再构建examples,由ordered(有序的)指定。

2.5 目标文件自动生成

TARGET =$$qtLibraryTarget(myplugin)

即debug模式下TARGET=myplugind,release模式下TARGET=myplugin,自动处理了。

2.6 文件复制

首先了解下这两个变量,这两个变量默认为空,不会做任何操作:

QMAKE_PRE_LINK 表示编译前执行
QMAKE_POST_LINK 表示编译后执行

举一个例子:

srcIncludeFile = $$PWD/*.h                              #要复制的文件
srcIncludeFile = $$replace(srcIncludeFile, /, \\);      #windows上需要换成反斜杠
outputIncludeDir = $$PWD/palletsdk/include              #要复制到哪里去
outputIncludeDir = $$replace(outputIncludeDir, /, \\);  #windows上需要换成反斜杠

QMAKE_PRE_LINK += copy /Y $$srcIncludeFile $$outputIncludeDir    #编译前执行复制操作
QMAKE_POST_LINK += copy /Y $$srcIncludeFile $$outputIncludeDir   #编译完成后执行复制操作

至于编译前后要做什么,大家可以自行发挥了。

2.7 关于Pro文件中的一些符号区别

下面这些符号是不是傻傻分不清楚:

$() $$() $$[] $${}

没关系,这里有一篇文章写得比较清楚,进入原文

3 结束

就写这么多啦,Pro文件内容很多,要想深入学习最好还是看帮助文档,其他的用法网上一搜也是一大堆,就不多说了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章