编译一次Qt要耗费太多的时间,其实通过很简单的几招可以帮你节省编译的时间。
第一招,编译之前确定哪些功能是不必要的,对编译树进行简单裁剪。
比如最常见的,像demos, examples,虽然很有参考价值,但完全可以放在后面用到的时候再单独编译小工程,这样可以节省不少时间。经过实践,最简单的方法是修改configure文件,在该文件中有个指定编译目录的字段:
QT_DEFAULT_BUILD_PARTS=”libs tools examples demos docs translations”
可以把examples、demos和docs从这里去掉,但要注意,别的可不能随便去掉。
在比较新的Qt版本里提供了 “-nomake” 的configure参数, 可以实现相同的功能。 如”configure -nomake demos -nomake examples” 就可以把examples和demos从编译过程中去掉。 不过这个选项要在比较新的Qt版本里才能很好的工作, 而且并不是所有的Qt支持的平台都支持这个选项了。
如果在后面的使用中发现有些小工程需要编译了,可以采用一般编译Qt程序的方法,即用Qt安装目录bin下的qmake来生成Makefile,同样可以编译和测试例子代码,一点也不影响使用。
第二招,裁剪Qt模块。
Qt从4版本开始采用了模块化的形式,将独立的功能封装在独立的库里,所以可以很简单的去掉一些不需要的库,这样也能节省编译时间和对硬盘空间的占用。 Qt的configure配置提供了一些设置模块的方法,如它支持-no-svg和-no-webkit,通过configure的时候加这些选项就可以去掉这部分支持。相应的还有很多小的功能可以通过configure参数的形式配置,具体的参考configure –help的输出。在查看configure帮助的时候特别要注意加*号的内容,也就是Qt默认的configure选项,有的时候默认选项可不一定是讨人喜欢的哦。
Qt桌面版本默认会尽量多的编译feature进去,这样有一定的好处,就是用户可以用到所有的Qt功能,但坏处也很明显,那就是编译出来的Qt超级大,特别是编译debug版本,基本上要占1到2G的空间,所以个人感觉研究一下configure的选项还是很有必要的。另外, 默认状况下有些插件是不会编译的,比如数据库插件,往往需要用户自己根据需要编译,这一点也要注意。
第三招,针对嵌入式版本的配置。
Qt的嵌入式版本本身就支持feature裁剪,我们可以充分利用这一特性让Qt库尽量变小。具体的做法是要做一个自己的qconfig-[myconfig].h特性文件,该文件中定义你要去掉Qt中的哪些feature。在configure的时候加“-qconfig myconfig”选项, Qt就会根据你给出的配置文件来编译,以达到裁剪的目的。这里要强调一下,这种裁剪方式只适用于嵌入式版本。这里的myconfig可以用任何你喜欢的名字来代替。
在qt的代码中已经给出了一些qconfig头文件的例子,默认编译采用full config也就是
不裁剪任何feature。所有Qt预定义好的qconfig文件,可以在src/corelib/global/下找到,包括qconfig-minimal.h, qconfig-small.h, qconfig.medium.h,qconfig-large.h和qconfig-dist.h,也就是从裁剪量由多到少都有据可依。如果要添加你自己的配置文件,要在src/corelib/global下建立一个形如qconfig-xxx.h的文件,这个xxx也就是你要在configure的时候传入的qconfig参数。笔者测试使用的Qt版本是4.4.1,这个版本的build system有个小毛病,就是如果你指定的qconfig参数实际上没有qconfig-xxx.h文件对应, build不会停止,它只会给出一个不起眼的提示,编译过程会继续, 这一点挺让人费解的。而且这种情况下Qt编译使用的配置基本上和fullconfig相同,鉴于它的让人迷惑的举动,个人觉得有必要提醒大家一下,使用自定义qconfig的时候一定要确定配置文件放对了位置,而且qconfig参数给的正确。
一般我们的建议是在桌面上测试阶段编译一个full的版本,再根据你的项目使用Qt feature的情况总结哪些可去掉的feature。 feature之间有千丝万缕的依赖关系,这个问题也是困扰很多人的难点所在。具体的依赖可以查阅src/corelib/global/qfeatures.h和src/corelib/global/qfeatures.txt(描述依赖关系的文档)。另外,Qt里还提供了一个可视化的配置依赖的工具,叫做qconfig,在QTDIR/tools/qconfig目录。该工具需要基于Qt桌面版本编译。如在我的linux系统下可以用下面的命令来编译:
$ cd qt-embedded-linux-commercial-4.4.1/tools/qconfig
$ /usr/local/Trolltech/Qt-4.4.3/bin/qmake
$ make
编译成功后运行./qconfig,初始要打开qfeatures.txt. Qconfig读取该文件生成一个树状图,该图很清楚的显示出feature之间的依赖关系。如下图所示,如果你去掉了LINEEDIT这个feature,用到该控件的combobox也就不能继续使用了。有了这个工具裁剪Qt变得简洁直观,方便了很多。
选定了你要去掉的feature后点击菜单File->Save As..会弹出保存文件的页面,文件名字应该定义成qconfig-xxx.h的形式,这样你在configure的时候就可以传入相应的qconfig参数了。你还可以通过选择File->Open打开现有的qconfig-xxx.h文件,通过修改已经有的文件更快的编辑配置。
根据笔者测试,未经裁剪的qte4.4.1编译出来为:
libQtCore.so是2.6M
libQtGui.so是9.5M
如果用small来编译,就能缩小为:
libQtCore.so是2.0M
libQtGui.so是5.7M
差异还是比较明显的。
相关推荐
qt在windows平台的运行链接库,如不安装Qt的win平台,运行qt程序很麻烦,这些链接库打 包到一起了,拷出来就能用。
Qt库 mini2440 移植 Qt库 mini2440 移植 Qt库 mini2440 移植
QT生成动态库,并导出接口类,VC加载动态库,并使用导出的接口类,从而实现VC与QT的混合编程,方便多技术栈互操作
演示Qt静态链接库与动态链接库的创建与使用。环境:windows xp Qt4, MinGW编译器环境。供备忘和参考。
QtVerbalExpressions:基于C VerbalExpressions 库的Qt库
exe:笔者部署可运行文件,因开发环境版本不同,可能存在无法直接使用的情况,两个部署文件(copy_ldd.sh及useLib1.sh)可以结合文章分享的(ubuntu下部署QT运行程序的方法一)链接进行使用。 myA:静态库工程文件。 ...
用vlc最新版本(v3.07)编译出的vlc-qt库文件,debug和release版本各一份,可直接使用,100%可用! VLC-Qt:一个结合了 Qt 应用程序和 libVLC 的免费开源库。它包含了用于媒体播放的核心类,以及用于更快速地进行媒体...
-prefix /usr/local/arm/qt4.8.6\ -opensource \ -confirm-license \ -release \ -static \ -embedded arm \ -xplatform qws/linux-arm-g++ \ -depths 16,18,24,32 \ -fast \ -optimized-qmake ...
Qt动态库.rarQt动态库.rarQt动态库.rarQt动态库.rarQt动态库.rarQt动态库.rarQt动态库.rarQt动态库.rar
实现功能:利用VS2012封装生成动态链接库(.dell和.lib)给QT调用 文件包含:1.VS2012生成动态库工程 2.QT5.5.1调用VS2012动态库工程(注释内含调用具体方法) 3.QT调用运行结果图片
基于opencv官网opencv-2.4.13.exe编译出来的Qt可用的opencv库。 使用说明: Qt creator为例, 1.在.pro配置文件中添加:头文件路径和lib路径: INCLUDEPATH += C:\Qt\opencvfile\include\opencv\ C:\Qt\opencvfile\...
qt二维码生成库 qt二维码生成库
C Qt库应用实例-背单词软件,QT库的作用挺大的,使用十分广泛,不过不少VC新手对QT库的使用方法还是多少有些肤浅,这个程序是使用QT库编写实现的背单词软件,功能十分强大,不像是新手写的,功能方面可实现从外部导入...
QT项目添加外部库详细步骤和例子,封装类,调用很方便
libvlc-qt-0.8.0 linux下vlc qt开发链接库
基于QT6(MSVC2019)WIN10 编译的QTXlsx库(release和debug版本)
只要是qt在android开发中调用动态库和静态库的例子。
QtXlsx开源库 编译好的静态库lib和动态库dll win7 下 vs2010+qt5.5 使用QtXlsx开源库
poppler-qt4库可以用于Qt桌面程序直接显示PDF文档内容,而不依赖于Adobe。但编译poppler-qt4过程较为复杂(依赖库较多)。 为了方便Qt程序员使用,笔者特意选择Qt4最后版本4.8.6作为开发环境。 使用MinGW 4.8.2作为...