# qt-builder **Repository Path**: kayven/qt-builder ## Basic Information - **Project Name**: qt-builder - **Description**: 图形化QT源码编译工具 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2017-12-26 - **Last Updated**: 2021-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # qt-builder 图形化QT源码编译工具 用于编译QT源码的图形化工具 ## 1. QT 与 Windows XP ### 支持Windows XP 的 QT 版本 官方说在**QT 5.6.2** 以后的版本都不支持WindowsXP,但实际上 **QT 5.7.1**也是可以的。推荐使用5.7.1,至少他提供了QuickControls2的基本支持 ### 编译器与编译选项 - 尽量使用MingW编译器进行编译, MinGW5.3.0以上的版本应该都没问题,我测试过的版面是MinGW-5.3.0和MinGW-7.2.0 >在使用MinGW编译QT 5.7.1时,可能会遇到在生成qttools的模块文档(mingw32-make docs)时出错的情况,但在执行一次mingw32-make docs,或者执行mingw32-make install_docs,就不报错了。原因懒得查了,加了缺省参数里加了强制编译选项,反正之后安装文档时会修正这个错误``` - 如果一定要用Visual C++,那最好用MSVC2010 > QT 5.7.1 的configure脚本已经不再支持 **-target xp** 参数,MSVC2012以上 > > 版本会在你部署的时候给你带来一些的麻烦(工具链问题) - 编译时使用 **-opengl desktop** 参数 > **不要使用 -opengl dynamic 或者 -opengl es2** - 添加 -no-angle以阻止QT使用ANGLE库: > ANGLE很久以前就不支持Windows XP了 > > 我曾经通过修改代码的方式强行编译成功,然而没有什么卵用:运行结果和狗屎一样 ### Qt Quick 2D Render QT 5.7.1的Qt Quick环境使用OpenGL 2.x 作为渲染引擎,而Windows XP只支持 1.x。 如果想要在Windows XP上相对正常的使用Qt Quick,你必须编译并安装 Qt Quick 2D Render模块 这个模块其实是一个用软件渲染(GUI渲染)来代替OpenGL渲染的 Qt scene graph render plugin 如果想要使用Qt Quick 2D Render(如果你已经正确的安装了他),只需要修改一下的环境变量即可: > export QMLSCENE_DEVICE=softwarecontext(Linux) > > set QMLSCENE_DEVICE=softwarecontext (Windows) Qt Quick 2D Render的代码并没有整合在Qt 5.7.1 中,需要单独code.qt.io克隆: > git clone https://code.qt.io/qt/qtdeclarative-render2d.git 获取源码以后,像一个普通的Qt module一样编译并安装他就可以。 > 需要注意的是,你用来编译Qt Quick 2D Render代码的Qt SDK本身必须配置了opengl支持 Qt Quick 2D Render有很多使用上的限制 > 具体请看Qt的官方说明: 最后说点没用的: > Qt 5.8.0以上的版本,已经内置支持了Qt Quick 2D Render。不止是可以使用软件渲染,还可以使用Direct3D 12来替代OpenGL进行渲染,真是牛逼啊!然而还是没有什么卵用,Qt 5.8.0以后的版本已经不支持Windows XP了 ## 2. 在MIPS系统(龙芯)上编译QT 5.9.4 QT 5.9.4在龙芯上编译会出错,原因是QT5.9以后的版本会在mips64平台上启用V8引擎(JS引擎)的JIT功能,此功能在编译时会导致一系列错误: V8引擎的JIT模块使用mips指令集以获取更快的执行速度,但这部分代码似乎只能只能用于mips32平台,在mips64平台上会导致一系列的编译错误(QT论坛里有人说似乎32位mips平台上也不好用,我没试过,不知道) 目前并没有什么好的解决办法(我可不想自己去改mips的优化代码,工程太庞大了,等更新吧),只能简单粗暴的在mips64平台上禁用V8引擎的JIT功能: > 在头文件{qt-source}/qtdeclarative/src/qml/jsruntime/qv4global_p.h的第125行插入 > ``` > #undef ENABLE_JIT > ``` > 这么干的代价是QML会告诉你:“你禁用了JIT,QML的动画会很慢巴拉巴拉巴拉...",但是我测试了一下,没有JIT的动画也还是可以接受的,总比没有qml和qtquick强。。。。。。 > > 截止到QT 5.10.1为止,此问题并没有被官方修改,这个蛋疼的办法也依然好用 ## 3. 用MinGW编译QT 5.9.4 使用MinGW32在Windows上编译QT 5.9.4时会出错,出错的现象是在编译qtbase时会报一个奇怪的编译错误: ``` can't write 49 bytes to section .text of .obj/debug/qopenglversionfunctionsfactory.o because: 'File too big' as.exe: .obj/debug/qopenglversionfunctionsfactory.o: too many sections (60503) can't close .obj/debug/qopenglversionfunctionsfactory.o: File too big ``` 这是MinGW编译器的一个bug,可以通过增加`-fno-keep-inline-dllexport`编译选项来解决,在QT5.9.3以及以前的版本中,这个编译选项是缺省添加到`qtbase/mkspecs/win32-g++/qmake.conf`中的,但5.9.4不知道为啥没了 解决这个问题的方式是修改`qtbase/mkspecs/win32-g++/qmake.conf`,并修改以下内容: ``` 修改 19 DEFINES += UNICODE _UNICODE WIN32 修改 20 QMAKE_COMPILES_DEFINES += __GNUC__ _WIN32 添加 33 QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARNON ``` 具体情况请参见: > https://bugreports.qt.io/browse/QTBUG-66123

> https://codereview.qt-project.org/#/c/216377

## 4. Windows上的QT 5.12.0 在Windows上编译QT 5.12.0时,需要安装LLVM(qttools中的qdoc需要),否则就没法编译qt的文档。直接在LLVM的官方网站上下载LLVM并安装就好 安装好以后设定环境变量LLVM_INSTALL_DIR到你的安装路径,但这里有个坑:**不要**在设定环境变量是为你的安装路径加引号(哪怕其中有空格)不然QT会找不到LLVM的路径,然后报错。。。。 Linux上应该没这问题