【 以下文字转载自 KDE_Qt 讨论区 】
发信人: hgoldfish (老鱼), 信区: KDE_Qt
标 题: windows 下编译最简 Qt
发信站: 水木社区 (Thu Jun 11 11:53:25 2020), 站内
Qt 为 windows 提供了一个在线安装包,以及一个巨大的离线安装包。使用在线安装包能够自由选择 Qt 版本。使用离线安装包可以在不需要网络地方或者在多台机器上使用。
但是两个安装器安装的 Qt 容量都太过于巨大了,包含了所有的 Qt 模块以及它们的 debug 信息。如果我们只使用 C++ 以及 QtWidgets 做 Qt 开发,就没必要安装那么多的组件,浪费空间。这时候可以考虑自己编译一下 Qt
首先下载 Qt 所需要的 mingw32 或者 mingw-w64. 自 Qt 5.6 以后,需要 c++11 支持,所以 Mingw32 就不能再使用了,我们这里下载的是 mingw64 7.3.0:
http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/windows_x86/desktop/tools_mingw/qt.tools.win32_mingw730/7.3.0-1-201903151311i686-7.3.0-release-posix-dwarf-rt_v5-rev0.7z
64 位的 mingw64 7.3.0
http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/windows_x86/desktop/tools_mingw/qt.tools.win64_mingw730/7.3.0-1x86_64-7.3.0-release-posix-seh-rt_v5-rev0.7z
下载后解压到:
C:\Qt\mingw730\
再下载 Qt 源代码:
http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/5.12/5.12.5/submodules/qtbase-everywhere-src-5.12.5.zip
在这个目录里面有 .tar.xz 和 .zip 两个格式的压缩包。前者适合 linux,而后者适合 Windows. 前者其实也可以在 Windows 下编译,只是额外需要 Perl 解释器。
把这个文件解压缩到:
C:\Qt\qtbase-everywhere-src-5.12.5
然后就可以开始编译了:
首先切换目录以及把 mingw32 的命令行加入到 %PATH% 里面:
cd C:\Qt\qtbase-everywhere-src-5.12.5
path C:\Qt\mingw730\bin;%PATH%
如果是 32 位的 mingw 有个 BUG,需要修改一下 Qt 源代码。看附注。
接着开始编译。
configure.bat -prefix C:/Qt/5.12.5/ -opensource -release -shared -no-icu -opengl desktop -no-style-windowsvista -optimize-size -nomake examples -nomake tests
mingw32-make -j4
其中 -optimize-size 让 qt 编译出比较小的 dll, 两个 -nomake 不编译 examples 和 tests 可以节省编译时间。-no-icu 去掉 icu 的依赖.
编译完安装。
mingw32-make install
此外,还可以独立安装 QtCreator 而不必使用 Qt 安装包。
http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/windows_x86/desktop/tools_qtcreator/qt.tools.qtcreator/4.10.1-0qtcreator.7z
==========================================
附注1,32位 mingw64 有个 rdrand 的 BUG 需要修复一下
所以在编译开始之前修改这个文件:
src/corelib/global/qrandom.cpp
这段代码:
#if defined(Q_PROCESSOR_X86) && QT_COMPILER_SUPPORTS_HERE(RDRND)
static qsizetype qt_random_cpu(void *buffer, qsizetype count) Q_DECL_NOTHROW;
修改成
#if defined(Q_PROCESSOR_X86_64) && QT_COMPILER_SUPPORTS_HERE(RDRND)
static qsizetype qt_random_cpu(void *buffer, qsizetype count) Q_DECL_NOTHROW;
在 32 位的情况下降低一点安全性。
==========================================
附注2, windows vista style 需要 windows sdk,使用 mingw 不能编译通过。
所以参数里面加上了 -no-style-windowsvista
来源:
https://hgoldfish.com/blogs/article/109/--
修改:hgoldfish FROM 112.47.122.*
FROM 117.24.206.*