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 #编译完成后执行复制操作
至于编译前后要做什么,大家可以自行发挥了。
还有一种方法:
INC_PATH = $$PWD/yourincpath
filelist += $$PWD/dialogs/*.h
filelist += $$PWD/dialogs/handlers/*.h
copy_files.files = $$filelist
copy_files.path = $$INC_PATH
COPIES += copy_files
可以将filelist中的所有文件复制到INC_PATH目录下,很简单。
2.7 关于Pro文件中的一些符号区别
下面这些符号是不是傻傻分不清楚:
$() $$() $$[] $${}
没关系,这里有一篇文章写得比较清楚,进入原文
3 结束
就写这么多啦,Pro文件内容很多,要想深入学习最好还是看帮助文档,其他的用法网上一搜也是一大堆,就不多说了。
作者QQ:115124903,欢迎交流。
每一步踏出,都是一次探索,一次成长。
每一步踏出,都是一次探索,一次成长。