详解 Qt 选择性编译和库裁减

QT工程编译过程学习 QT的pro工程了解学习,深入了解QT的编译过程。 阅读详情

Qt 选择性编译和库裁减是本文将要介绍的内容,编译一次Qt要耗费太多的时间,常常是越着急用它,编起来越慢。其实通过很简单的几招可以帮你节省编译的时间。下面就一一道来:

编译之前确定哪些功能是不必要的,对编译树进行简单裁剪

比如最常见的,像demos, examples,虽然很有参考价值,但完全可以放在后面用到的时候再单独编译小工程,这样可以节省不少时间。经过实践,最简单的方法是修改configure文件,在该文件中有个指定编译目录的字段:

  1. 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系统下可以 用下面的命令来编译:

  1. $ cd qt-embedded-linux-commercial-4.4.1/tools/qconfig  
  2. $ /usr/local/Trolltech/Qt-4.4.3/bin/qmake  
  3. $ 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编译出来为:

  1. libQtCore.so是2.6M  
  2. libQtGui.so是9.5M 

如果用small来编译,就能缩小为:

  1. libQtCore.so是2.0M  
  2. libQtGui.so是5.7M 

差异还是比较明显的。

【Qt】一文总结QtCreator中MSVC编译套件 在QtCreator中使用MSVC编译套件构建项目时,在Kits对话框中编译器一栏会识别出许多MSVC编译套件,在实际项目开发中,如何选择这些编译套件呢,本文就这个问题展开,主要内容如下:(1)描述Visual Studio下的命令行工具的环境变量和几种命令提示符。(2)描述Visual Studio的命令文件。(3)描述QtCreator对MSVC编译套价的识别。(注1:本文的前提是已经完成对Visual Studio集成开发工具的安装,如果没有安装,QtCreator将会找不到MSVC相关的编译套件!) 阅读详情

相关推荐

RV1126开发板快速编译实战:从30分钟到8分钟,我是如何精简Buildroot配置的

本文详细介绍了如何通过精简Buildroot配置,将RV1126开发板的编译时间从30分钟缩短至8分钟。通过分析SDK的编译体系、优化并行编译设置和移除冗余软件包,开发者可以显著提升嵌入式开发效率。文章还提供了关键配置文件的解析和实战优化技巧,帮助开发者快速实现编译效率的革命性提升。

weixin_30875157的博客 195

QT工程文件的条件编译选择与额外的编译参数配置

QTCreator打开.pro工程文件后,依据不同的构建套件创建项目组。在项目组中,点开构建步骤的“详情”,增加一个自己的宏定义,比如:

Chinley的大杂烩 7707

基于MicroBlaze与LWIP的FPGA以太网通信实战指南

本文详细介绍了基于MicroBlaze软核处理器与LWIP协议栈的FPGA以太网通信实现方案。通过Vivado工具链配置硬件设计,结合LWIP轻量级TCP/IP协议栈优化,提供高效、低成本的嵌入式网络解决方案,适用于工业控制等场景。文章包含硬件设计、软件配置及常见问题排查等实战指南。

weixin_29290863的博客 532

QT pro文件增加自定义条件选择需要编译的文件

QT pro文件增加自定义条件选择需要编译的文件

qq_43140906的博客 523

右腿驱动电路设计:从共模干扰原理到生物电采集实战

在生物电信号采集领域,共模干扰是影响测量精度的核心挑战之一,其本质源于环境电磁场通过容性耦合在人体表面产生的感应电流。根据欧姆定律,由于人体组织阻抗的不均衡性,共模电流会在不同测量点产生差异化的压降,从而转化为难以滤除的差分噪声。为解决这一问题,右腿驱动技术应运而生,它通过负反馈原理主动抵消干扰,显著提升系统的共模抑制比。该技术广泛应用于心电图、脑电图等医疗电子设备中,是确保微弱生理信号质量的关键环节。本文结合工程实践,深入剖析了右腿驱动电路中的仪表放大器选型、反馈环路稳定性设计以及PCB布局布线要点,为高

weixin_31476015的博客 440

基于强化学习方法的PID参数整定

前言 PID控制器在工业界应用非常广泛,但是PID的参数调节一般需要人工根据经验法来试。对于有经验的工程师来说,一般试几次就可以获得满足调节的参数。然而对于新手工程师却很难确定一套比较好的参数。 这里我们采用强化学习的方法来调节PID参数。 这个例子展示了如何使用双延迟深度确定性策略梯度(TD3:twin-delayed deep deterministic policy gradient)强化学习算法来调整PI控制器。整定控制器的性能与使用Control System Tuner app整定的控制器的性能

weixin_42188287的博客 2万+

[菜鸡学QT笔记①]QT的编译过程

学习QT笔记

weixin_57562875的博客 736

解锁机器人动态平衡算法:从原理到实践

机器人的动态平衡,是指机器人在运动过程中,面对各种复杂的动态变化和外界干扰,依然能够维持稳定状态,不发生倾倒或失去控制的能力。它就像是一位技艺精湛的舞者,在舞台上翩翩起舞时,无论做出多么复杂的动作,都能巧妙地调整身体姿态,始终保持平衡,展现出优美的舞姿。在实际应用中,机器人的动态平衡对于其稳定运行起着至关重要的作用。以双足机器人为例,当它行走在不平整的地面上时,地面的起伏会使机器人的重心不断发生变化。如果没有良好的动态平衡能力,机器人就很容易因为重心偏移而摔倒,无法完成行走任务。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 3837

详解 Qt 选择性编译和库裁减 qconfig(转载)

Qt 选择性编译和库裁减是本文将要介绍的内容,编译一次Qt要耗费太多的时间, 常常是越着急用它,编起来越慢。其实通过很简单的几招可以帮你节省编译的时间。 下面就一一道来: 编译之前确定哪些功能是不必要的,对编译树进行简单裁剪 比如最常见的,像demos, examples,虽然很有参考价值, 但完全可以放在后面用到的时候再单独编译小工程,这样可以节省不少时间。经过实践,最简单的方法是修改...

yjbaobo的博客 1595

OpenStack 2018 年终盘点

目录 文章目录目录前言OpenStack 一年来的成长NovaCinderNeutronIronicCyborgOctaviaKollaMagnumZunKuryr从 OpenStack 到 OpenInfra 前言 这是最好的时代,也是最坏的时代 — — 查尔斯·约翰·赫芬姆·狄更斯《双城记》 年关将至,闲暇之余,回顾我与 OpenStack 的 2018。 NOTE:仅作为个人见解,与公...

烟云的计算 3579

手把手教你学Simulink--基于新能源并网与协调控制的场景实例:双馈异步风力发电机并网运行仿真

随着“双碳”目标的推进,风力发电已成为新能源并网的核心组成部分。其中,双馈异步风力发电机(Doubly-Fed Induction Generator, DFIG)因其变频器容量小(仅处理转差功率)、可实现有功/无功独立调节、运行效率高等优势,广泛应用于现代兆瓦级风电机组。DFIG系统通过转子侧变流器(Rotor-Side Converter, RSC)和网侧变流器(Grid-Side Converter, GSC)实现对发电机转矩与电网无功的精确控制,支持最大功率点跟踪(MPPT)和。

MHD0815的博客 280

Qt选择性编译和库的裁减

Qt选择性编译和库的裁减 编译一次Qt要耗费太多的时间,常常是越着急用它,编起来越慢。其实通过很简单的几招可以帮你节省编译的时间。下面就一一道来: 第一招,编译之前确定哪些功能是不必要的,对编译树进行简单裁剪。 比如最常见的,像demos, examples,虽然很有参考价值,但完全可以放在后面用到的时候再单独编译小工程,这样可以节省不少时间。经过实践,最简单的方法是修改conf

痞子龙3D编程 1488

假期搞定!2026国社科申报AI全攻略指南:从选题到创新,7大核心要点手把手教你!

最后给大家推荐的400多所高校教师都在用的AI平台——高级学术版专业应用平台,集成了国际主流学术应用,以及ChatGPT、Claude、Gemini、Grok等Al大模型的高级版本平台,还有,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。你的任务是:用高度凝练的方式说明在(某一明确国家战略 / 政策方向,如:中国式现代化、共同富裕、基层治理现代化、数字中国、文化强国、国家安全等)背景下,我究竟要研究一个什么“具体而可操作的问题”。

智能AI让学术科研更容易 623

Qt 选择性编译和库裁减(进一步裁剪)

根据上述方法方式进行裁剪,本人所裁剪QT配置(保存在qteverywhere.sh): #!/bin/sh ./configure \ -prefix /usr/local/arm/qt4.8.6\ -opensource \ -confirm-license \ -release \ -static \ -embedded arm \ -xplatform qws/linux-a...

WangHuiShou的博客 456

网络流量异常信息分析方法研究

本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检测算法。该算法采用卷积神经网络(CNN)和长短时记忆神经网络(LSTM)结合的方式,通过训练得到二分类模型,从而实现对网络流量异常的检测。随着互联网的飞速发展,网络攻击事件日益增多,网络安全问题成为了亟待解决的问题之一。常见的网络攻击手段包括 DDoS 攻击、SQL 注入、XSS 攻击等,这些攻击手段可能导致网络系统发生异常,给网络运维、数据安全带来极大的挑战。

肥晨开发的学习之路 1034

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Qt 选择性编译和库裁减

  减少Qt编译时间暨简单Qt裁剪 收藏 编译一次Qt要耗费太多的时间,常常是越着急用它,编起来越慢。其实通过很简单的几招可以帮你节省编译的时间。下面就一一道来:   第一招,编译之前确定哪些功能是不必要的,对编译树进行简单裁剪。   比如最常见的,像demos, examples,虽然很有参考价值,但完全可以放在后面用到的时候再单独编译小工程,这样可以节省不少时间。经过实践,最简单的...

WangHuiShou的博客 1709

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Qt4.8.7 移植到海思3520D

配置交叉编译器 编译Qt4.8.7的源码库进入qt-everywhere-opensource-src-4.8.6/mkspecs/目录,复制linux-arm-g++目录为linux-arm-hisiv100-g++ 进入linux-arm-hisiv100-g++,修改文件qmake.conf 修改如下,即将其中所有的arm-linux为arm-hisiv100nptl-linux # mo

何亮5083的博客 2702

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[编译] QT编译./configure参数的详细解释[新手充电必读]

================================= ====全文是按照./configure -help来翻译的======== ================================== Usage: configure [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir <dir>] [-docdir <dir>] [-headerdir...

君君的博客 1772

QT学习(0):qmake和编译

生成目标文件.obj/.o,包含生成的机器码以及其他信息,如符号表(代码中所有符号,如函数、变量、标签,及其对应内存地址的表格)、重定位信息(全局符号、外部符号或库的实际地址)和调试数据(源代码文件的映射关系、函数和变量的名称、行号信息、堆栈跟踪信息等。可以根据项目文件(.pro文件)生成不同平台和不同构建系统所需的构建规则(makefile)和项目文件(.sln和.vcxproj文件)。将库文件包含到我们的程序中的过程,生成可执行文件.exe/.out,.dll/.so, .lib/.a。

qq_45088122的博客 1252

QT中如何识别编译器和实现条件编译以及设定目标文件生成路径

contains(QMAKE_CXX,aarch64-linux-gnu-g++) //aarch64平台(飞腾加银河麒麟),因为是交叉编译所以QMAKE是用aarch64-linux-gnu-g++编译出来的。所以DEFINES 就是在pro文件中定义的宏,这个宏是一个全局的,程序中也可使用。Qt的pro文件中使用DEFINES 来实现类似gcc -D的条件编译功能。QT会在编译的时候将这个选项加入,在pro文件中可以直接拿来识别。在生成的makefile中,可以看到编译宏。pro文件加入下面这句。

hw5230的博客 1335

QT 指定程序编译生成文件的位置

在项目构建过程中,,其中包含清单QObject类和元对象的所有信息,生成的文件一般以.moc为后缀。

weixin_51795597的博客 4858

Qt源码编译过程中配置文件中的选项说明

Qt源码编译过程中配置文件中的选项说明

qq_30150579的博客 1888

Qt项目的构建(编译)、运行与调试(三)

Qt项目的构建(编译)、运行与调试

Robot 离线编程 PDPS Opencascade 1万+

QT 源码编译--windows

转自:https://blog.youkuaiyun.com/hulingerlin/article/details/81914279 参照该博客基础上,添加一些自己编译中遇到的问题与解决情况。 1.编译的前的基础了解 目标platforms(平台),编译静态库或者动态库,skip某个功能模块等选项 2.源码下载 1.直接下载,下载地址:http://download.qt.io/archive/qt/ 选择含有everywhere-src的版本即为qt源码版本,我此处下载的是:qt-everywhere.

qqwangfan的专栏 1668

Qt建的Cmake项目分文件编写,并在Qt上编译运行(超详细,只需怎CmakeLists.txt中加这两行)

一、Qt5的Creator中创建一个Cmake项目后会自动生成CMakeLists.txt文件和默认的头文件、源文件、ui文件。二、在项目文件夹中创建src文件夹、include文件夹、ui文件夹,将默认的源文件、头文件、ui文件分别放入新建的文件夹中。完整的CMakeLists.txt如下,改动的地方也就只有三处。3. 添加ui文件生成的路径,用于编译后生成ui头文件。1.更改编译文件的路径,在原来的基础上加文件夹名称。四、删除项目构建编译时产生的中间文件重新构建编译。

qq_61879710的博客 4223
上一篇: QT 移植杂项
下一篇: Qt 界面实现多国语言的切换实例
HiRuyue
博客等级 码龄14年 47粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值