支持源码单步调试QT库编译笔记
支持源码单步调试QT库编译笔记
编译环境:windows 10
编译工具:mingw_4_4_0
Qt源码版本:qt-everywhere-opensource-src-4.8.5(下载地址:http://download.qt.io/archive/qt/4.8/4.8.5/)
1、确定已经安装合适的编译工具,本次编译采用mingw_4_4_0。可以在cmd输入以下命令检测是否已经正确安装。
l gcc –version
l g++ --version
l mingw32-make –version
如果提示不是内部或外部命令,也不是可运行的程序或批处理文件。请检查是否已经将{mingwDir}/bin路径添加到系统环境变量path中。
2、正式编译前的配置
在正式编译前配置或裁剪Qt源码,进入{ qt-everywhere-opensource-src-4.8.5}目录打开configure文件,查找以下字段:
QT_DEFAULT_BUILD_PARTS=”libs tools examples demos docs translations”
根据需求,可进行必要裁剪。例如当只需要Qt库时,可以把examples,demos,docs删除,加快编译速度。
接着通过configure工具,生成makefile文件。
通过cmd进入到{ qt-everywhere-opensource-src-4.8.5}目录下,输入:
configure –help
即可查看配置参数说明,带*的参数为默认使用参数,带+号的参数要经过评估才能确定是否能使用。
下面说明几个常用的参数:
|
参数 |
说明 |
|
-release |
只生成release版本的库 |
|
*-debug |
只生成debug版本的库 |
|
-debug-and-release |
生成两个库,包括release库与debug库 |
|
-opensource |
编译开源版 |
|
-commercial |
编译商业版,需要提供密钥 |
|
*-shared |
生成动态链接库 |
|
-static |
生成静态链接库 |
|
-platform <spe> |
知道编译平台,<spe>为编译平台 |
本次编译配置命令为:
configure –debug –opensource –fast –platform win32-g++ -no-webkit –no-s60
(如果想使用VS的编译器,可以将win32-g++改为win32-msvc2013(VS2013版本))
输入该命令后,会开源许可证的提示,安装提示输入’y’后直接跳过,等待10分钟左右,会提示配置完成。
3、正式编译
正确配置结束后,直接键入mingw32-make进行编译,2个小时以后,即可编译完成。
(如果使用的是VS编译器,则需要进入VS开发人员命令行,进入源码目录后使用nmake进行编译)
4、编译后使用
方法一:通过Qt Creator使用
打开Qt Creator,通过菜单栏-工具-选项打开设置窗口,进入下图选项卡:

点击添加,选择{ qt-everywhere-opensource-src-4.8.5}\bin目录下的qmake.exe。再切换到下图选项卡:

添加一个新的构建套件,配置如上图所示(原先使用了mingw4_4_0的GDB调试器,无法中QTC进行调试,切换到mingw4_9_2的GDB调试器,即可正常调试,猜测是QTC版本太高,不支持低版本的mingw的调试器)。
之后新建一个工程,选择该套件进行编译即可。在调试模式下,支持单步调试进Qt源码中。
方法二:命令行编译
将{ qt-everywhere-opensource-src-4.8.5}\bin路径添加到系统环境变量path 中,使用以下命令测试是否添加正确:
qmake –version
正确安装后,cmd命令行下,进入工程目录{workdir},使用如下命令生成可执行文件:
qmake -project
qmake
mingw32-make
中{workdir}\debug目录下可找到可执行文件。
(如果是VS的编译器则使用qmake -r -spec win32-msvc2013然后执行nmake,需要在VS2013 开发人员命令提示中使用
或者qmake -r -spec win32-msvc2013 -tp vc生成vcxproj工程文件,双击打开,使用VS编译)
5、编译后对源码进行修改
方法一:
{ qt-everywhere-opensource-src-4.8.5}\src路径下每个子文件夹都有其对应的pro文件。例如现在需要修改QmessageBox,该模块位于gui目录下,只需通过Qt Creator打开gui.pro文件(正常情况下可以双击打开)。选择一个构建套件,要求是编译器必须与原先编译源码时一样。之后进入项目配置视图,清除自动生成的qmake,make构建步骤,添加自定义构建步骤,结果如下图所示:

只需键入mingw32-make即可(如果采用VS编译器,键入nmake)。
修改QmessageBox完成后,构建工程即可(点击运行会弹出一个对话框,提示无法找到可执行程序,忽略即可)。之后Qt库会自动更新,其他选择该Qt库的工程无需任何调整。
注意!不要执行qmake操作!!
方法二:
直接修改QmessageBox,修改完成后,通过cmd命令行进入到gui文件夹,使用mingw32-make命令(如果采用VS编译器,键入nmake),之后同样会自动更新相应的Qt库。
支持源码单步调试QT库编译笔记的更多相关文章
- MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试
一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...
- BCB6 如何跨工程(Project)进行源码级调试
如何跨工程(Project)进行源码级调试 在日常工作中,如何跨工程(Project)进行源码级调试这是个无法回避的问题.例如:一个应用程序工程为“prj_A”,一个动态库工程为“prj_B”,“pr ...
- 痞子衡嵌入式:MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异. 程序函数库是一个包含已经编译好代码和数据的函数集合,这 ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程
原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一 ...
- Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...
- windbg源码驱动调试 + 无源码驱动调试
windbg源码驱动调试 环境信息 虚拟机:win7 32位 windbg:6.12(版本不存在太大影响) 设置过程 windbg与虚拟机连接:链接 配置windbg 配置好双机调试后,点击win ...
- netcdf源码在windows上的编译
作者:朱金灿 来源:http://blog.csdn.net/clever101 今天搞搞netcdf源码在windows上的编译,折腾了半天,算是搞成了,特地记录一下过程.我的目标是要生成netcd ...
- 源码方式安装 lrzsz库
源码方式安装 lrzsz库:https://www.cnblogs.com/cocoajin/p/11731787.html 我们都知道安装了lrzsz工具的linux系统环境,在shell里可以非常 ...
随机推荐
- linux的history命令设置
history的历史记录,同一个用户的各个会话,读取到的内容也是不一样的,原因是它读取的是shell会话缓存里的内容.只有当用户退出当前会话的时候,会话里的缓存内容才会写入~/.bash_histor ...
- caffe版faster-RCNN环境搭建
faster-rcnn提出论文: <Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks& ...
- Linux 主机被入侵后的处理案例
Linux主机被入侵后的处理案例 提交 我的留言 加载中 已留言 一次Linux被入侵后的分析 下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Lin ...
- 百科知识 hta文件如何打开
后缀名为hta是什么文件,谢谢? 2006-10-11 21:36 提问者: tanhailong2006 | 浏览次数:2092次 我来帮他解答 输入内容已经达到长度限制 还能输入 9999 字 插 ...
- 合并SO为单独交货单
本场景为单步交货 为客户建立专用的route. 增加一个pull rule 在做订单的时候,为订单行选择 上面建立好的route, 连续建立了 2个 订单 SO ...
- python--函数程序分析
写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作 import os #加载模块 def xiu(a,b,c): #三个接受值的形参 f = open(a,encod ...
- Linux 系统监控.诊断工具之 IO wait
1. 常用组合方式有如下几种: 用vmstat.sar.iostat检测是否是CPU瓶颈 用free.vmstat检测是否是内存瓶颈 用iostat.dmesg 检测是否是磁盘I/O瓶颈 用netst ...
- 多媒体开发之编码gop---什么是GOP
所谓GOP,意思是画面组,MPEG格中的帧序列,分为I.P.B三种,如排成IBBPBBPBBPBBPBBP...样式,这种连续的帧图片组合即为GOP(画面群,GROUP OF PICTURE),是MP ...
- 《AndroidStudio有用指南》反馈问题和建议
<AndroidStudio有用指南>反馈问题和建议 IntelliJ IDEA在持续更新, Android Studio也在持续更新, 本书也将会持续更新. Android Studio ...
- java基础知识查漏 三
一.Servlet 和Jsp的生命周期 1.Servlet生命周期 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发 ...