- 浏览: 236272 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wahahachuang8:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
服务器推送技术 java -
mahuanjian:
[flash=200,200][/flash]
服务器推送技术 java -
wenjundiandian:
下面有网页编辑器的话还是会被隐藏.
ext中消息框、提示框、确认框显示在最前面的解决方法 -
天塔上的猫:
/**
* JAVA常见的权限控制算法的实现
*
* ...
JAVA常见的权限控制算法的实现
本文介绍的是 Qt 选择性编译和库裁减,帮你节约时间的一篇文章,先来看内容。
AD:
Qt 选择性编译和库裁减是本文将要介绍的内容,编译一次Qt要耗费太多的时间,常常是越着急用它,编起来越慢。其实通过很简单的几招可以帮你节省编译的时间。下面就一一道来:
编译之前确定哪些功能是不必要的,对编译树进行简单裁剪
比如最常见的,像demos, examples,虽然很有参考价值,但完全可以放在后面用到的时候再单独编译小工程,这样可以节省不少时间。经过实践,最简单的方法是修改configure文件,在该文件中有个指定编译目录的字段:
- QT_DEFAULT_BUILD_PARTS=”libs tools examples demos docs translations”
可以把examples、demos和docs从这里去掉,但要注意,别的可不能随便去掉。
如果在后面的使用中发现有些小工程需要编译了,可以采用一般编译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 选择性编译和库裁减的内容介绍完了,希望本文对你有所帮助。更多内容请参考编辑推荐。
来源:http://www.cppblog.com/lauer3912/archive/2011/07/26/151834.html
发表评论
-
qtwebkit中js事件的正确写法。
2012-08-15 09:50 971<script language="JavaS ... -
qtwebkit截图
2012-08-13 13:29 800QSize size = m_view->page()- ... -
Qt 中一些常用类的中文说明
2012-02-22 23:39 1072作者:丁冬,华清远见嵌 ... -
输入法
2012-01-04 18:00 0http://civilnet.cn/syszux/syszu ... -
QT启动前有绿屏怎么处理
2012-01-04 09:49 1249笑看人生pual(13290889) 16:32:27QT启动 ... -
QT实现截取屏幕
2012-01-04 09:48 1192本文阐述了一个在Qtopia下截取屏幕的方法,实际上Qtopi ... -
在QT中通过摄像头动态显示图片 .
2012-01-04 09:49 1916Camgui::Camgui(QWidget *parent, ... -
脚本打包大量文件学习
2011-12-19 09:33 773TARGET_DIR=$PWDcd /list=`cat &l ... -
QT 同时支持鼠标和触摸屏
2011-12-17 12:36 1651现在 如果我要使用鼠标导入环境变量export QWS_M ... -
Qt中Qstring,char,int,QByteArray之间到转换
2011-12-17 12:31 1142各种数据类型的相互转换char * 与 const char ... -
QT Creator的style sheet的几种用法(QT Creator)(StyleSheet)(样式)(QT4.7)(用法)
2011-12-10 20:16 1851摘要: QT Create中,对butt ... -
QT学习笔记(QT4.7)(笔记)
2011-12-10 20:16 1884摘要: 由于 ... -
QT 4.7支持中文(QT4.7)(中文)(makeqpf)
2011-12-10 20:16 2030摘要: QT4.7.0在移植到开发板上的 ... -
QImage变暗
2011-12-16 14:50 1078_image = QPixmap::grabWindow ... -
Qt/Embedded动态旋转屏幕
2011-12-10 20:16 1099距离上次发博文已经有 ... -
如何在QT下执行shell或外部程序
2011-12-10 20:17 1987摘要: 通常,我们运行shell程序都是在终端里进行的, ... -
linux嵌入式qt的屏幕旋转与字体大小问题
2011-12-16 14:50 2379【1、与qt程序显示文字大小有关的两项】 export ... -
改变QMessageBox的大小
2011-12-16 14:50 1005创建一个QMessageBox: QMessageBox m ... -
QT坐标变换
2011-12-09 09:18 1039------------------------------ ... -
QT画对话框窗口圆角
2011-12-09 09:16 1544QPainterPath path; QRectF rec ...
相关推荐
**Qt5.15.2官方动态编译库详解** Qt是一个跨平台的应用程序开发框架,主要用于C++编程,但同时也支持QML和其他语言。Qt5.15.2是Qt系列的一个重要版本,它提供了丰富的功能和改进,旨在帮助开发者构建高性能、高质量...
### Qt编译Geos库详解 #### 一、前言 本文档旨在详细介绍如何在Windows环境下使用Qt编译Geos库,并进一步说明如何在新建的Qt项目中正确配置及使用Geos库。Geos(Geometry Engine Open Source)是用于处理几何对象...
**完美编译mupdf-qt动态链接库详解** mupdf-qt是MuPDF的Qt界面版本,它提供了一个轻量级、高效且可定制的PDF查看器,支持多种平台。在Windows环境下,通常使用Visual Studio(VS)作为编译工具,配合Qt库来构建...
### Ubuntu 下 Qt 静态编译及使用详解 #### 一、引言 在开发跨平台的应用程序时,Qt 是一个非常强大的选择。对于希望将应用程序发布到多个 Linux 发行版上的开发者而言,静态编译 Qt 可以极大地简化部署流程。本文...
**Qt5.15.12 静态库详解** Qt是一个强大的跨平台应用程序开发框架,被广泛用于创建桌面、移动以及嵌入式系统的图形用户界面。此资源是Qt5.15.12的预编译静态库版本,特别针对Windows 64位操作系统,并且是使用...
在压缩包文件`msvc-static`中,通常会包含所有静态编译的Qt库文件,以及必要的头文件和库文件。这些文件是编译过程的产物,用于构建和运行使用静态Qt库的应用程序。确保在项目设置中指向这个目录,以便正确链接静态...
**Qt6.0 编译工具详解** Qt6.0 是一个强大的跨平台应用程序开发框架,广泛用于构建桌面、移动和嵌入式系统的GUI(图形用户界面)应用。要从源代码编译Qt6.0,你需要一套完整的编译工具链。这个压缩包提供了编译Qt...
**QtXlsx 库详解** QtXlsx 是一个基于 Qt 框架的开源库,专为处理 Microsoft Excel 文件(.xlsx 格式)而设计。这个库提供了一个方便的 API,使得在 Qt 应用程序中读写 Excel 数据变得简单易行。你已经获得了一个...
### Ubuntu上Qt静态编译版本制作详解 #### 概述 在进行跨平台软件开发时,经常遇到的一个问题是,如何让编译好的程序能够在没有安装Qt的机器上直接运行,而不依赖于Qt的相关动态库(如.so文件)。解决这一问题的...
在开始编译过程之前,请确保您的开发环境已经安装了必要的工具链和库文件,包括但不限于交叉编译器(如`arm-linux-gcc`)、构建工具(如`make`),以及其他相关的依赖库。 #### 步骤详解 ### 1. 编译tslib库 **...
为了解决这一问题,可以采用静态编译的方式,将 Qt 库编译进应用程序中,从而提高应用程序的便携性和独立性。 #### 四、静态编译的步骤 ##### 步骤一:准备工具 1. **下载 Qt SDK**:访问 Qt 官方网站 ...
**RabbitMQ客户端qamqp库源码与QT调用示例详解** RabbitMQ是一种广泛应用的消息中间件,它基于AMQP(Advanced Message Queuing Protocol)协议,提供高可用、可扩展的消息传递服务。在本资源中,我们将探讨qamqp库...
### QT4.4.3与Windows VS2005编译安装详解 #### 一、安装准备 在开始编译安装QT4.4.3之前,需要做好一系列准备工作。 ##### 1. 准备安装文件 - **QT 4.4.3 OpenSource for Windows** 下载地址: `ftp://ftp....
**QtCharts 5.7.0 源码与编译安装详解** QtCharts是Qt框架中的一个模块,专门用于创建各种数据可视化图表,如折线图、柱状图、饼图等。在5.7.0版本中,它提供了丰富的图形类型和定制选项,使得开发者能够轻松地在...
它编译出的库文件同样支持32位和64位系统,但可能需要额外处理与Windows特定API的兼容性问题。 **2. 架构与组件** `Log4Qt`的核心组件包括以下部分: - **Logger**: 日志记录的主入口点,负责管理所有日志记录器...
**Qt MQTT 6.4.3 MSVC2019 编译详解** Qt MQTT是Qt框架中的一个组件,用于支持MQTT(Message Queuing Telemetry Transport)协议,这是一种轻量级的消息传输协议,常用于物联网(IoT)设备间的通信。在6.4.3版本中,...
### OSG+Qt编译说明详解 #### 一、前言 本文旨在详细介绍如何通过CMake工具配合Visual Studio 2013来编译OpenSceneGraph(OSG)与Qt集成项目的过程。此过程适用于希望将OSG与Qt集成开发三维图形应用的开发者。 ###...
**Qt5.2.0与Boost库的集成详解** 在软件开发中,Qt与Boost库的结合使用可以增强应用程序的功能和性能。本文将详细介绍如何在Qt5.2.0环境下编译并集成Boost库,以充分利用Boost的强大功能。 首先,Boost库是一个...