Qt 5.15的源码编译(Windows)

本文详细介绍了如何在Windows环境下,使用msys2和mingw64编译Qt5.15及Qt6的源码。随着Qt策略的改变,开源用户需要通过在线安装工具或手动编译来获取Qt。文章提供了编译所需的依赖、步骤和配置选项,包括OpenGL、ICU、OpenSSL、Python等的安装,以及解决qtmultimedia编译错误的方法。此外,还提到了QtCreator的编译问题,需用cmake而非qmake。
该文章已生成可运行项目,

前言:在技术革新如此之快的时代,Qt也在为适应这些变化发生着重大的改变。又一长期(3年)支持版Qt 5.15 LTS在2020年3月发布,重大更新的大版本Qt 6.0也在2020年12月发布。但是,Qt的策略也发生了变化。从Qt 5.15开始,安装Qt需要Qt账户,今后的长期支持版将对只针对商业用户,离线安装包也只针对商业用户开放。这意味着,开源用户已经没法像以前直接下载安装包安装Qt,只能通过在线安装工具安装Qt,而且需要通过升级安装将来发布的小补丁版本来使用该长期支持版。详见.
当然,我们还是可以手动编译安装Qt,这个办法只要Qt还是开源的就永远是可行的。这也是本文主要分享的。本文适用于:Qt5.15 + windows + msys2(mingw64)。

编译源码参考资料

首先下载源代码,如果网速过慢,可以用tuna镜像
解压源码到你想要保存的位置,进入源代码根目录。注意,源码根目录所在层级一定不要太深太长,免得因windows路径长度限制导致奇怪问题。

经验:根目录下的README可以仔细看看,这是编译当前源码最直接的资料

Qt官网的一些编译指导文档。
Supported Platforms
Qt for windows
Qt for Windows - Requirements
Qt for Windows - Building from Source
Qt Configure Options
Building Qt 5 from Git
MinGW-64-bit

所需依赖-总结

  1. msys2
    如你所见,Qt项目依赖了跟多其他开源项目,如果单纯地使用mingw64编译,会因为缺少很多其他开源库,而无法进行编译。msys2是个很优秀的项目。它将linux下的很多工具和库移植到了windows上,并提供一套类linux的shell环境和完善的编译工具链,方便开发者编译,安装,运行原生windows软件。通过使用msys2的Arch Linux包管理工具pacman,可以很方便自由地安装我们需要的库。 下载
  2. openGL ANGLE
    Qt Quick 2 需要 OpenGL 2.1(或者更高版本) 或者OpenGL ES 2.0 才能工作。
    在Windows上, 有两种办法:
    1. 使用 ANGLE 来将OpenGL调用映射为 DirectX (默认)
    2. 使用Windows系统上显卡厂商提供的原生OpenGL 驱动
      Qt 5中已经集成了一份ANGLE。如果要使用方法1,对于mingw编译,你需要安装 DirectX SDK。
      如果要使用方法2,你需要确保你的显卡驱动支持OpenGL 2.1 或者更高版本 (注意:微软官方的Windows驱动仅支持OpenGL 1.1,这显然是不够的),然后在使用configure时加上参数’-opengl desktop’。暂时使用-opengl desktop ,angle待以后有时间再研究安装。
  3. ICU
    Qt 5 可以通过 ICU 库来得到UNICODE和 Globalization支持。 构建Qt Webkit时将会用到。
    QtWebkit:在Qt5.6以前,都是使用QtWebkit组件,但Qt5.6以后,移除了QtWebkit这个组件
    QtWebEngine:Qt5.6以后的MSVC版本,引进了基于Chromium的浏览器引擎 QtWebEngine
    QAxWidget:Qt5.6以后的mingw版本,由于移除了Qt Webkit,mingw版本不能使用QtWebEngine,因此只能使用QAxWidget控件。
    ICU可以通过msys2快速安装。
  4. openSSL
    Qt使用openSSL以支持SSL网络通信。openSSL可以通过msys2快速安装。
  5. Python 3 以上(编译Qml需要)
  6. Perl 5.8 以上 Perl可以通过msys2快速安装。

另外,Qt还依赖一些小的第三方库,已经集成在Qt源码中。包括zlib libjpeg libpng freetype PCRE HarfBuzz-NG等,如果在你的系统检测不到时,将自动使用。也可以在configure时指定,通过加 -qt前缀或-system前缀 指示使用哪个来编译。
如:-qt-zlib指定使用Qt集成的 -system-zlib指定使用本地系统的 但是一开始的配置测试,该怎么让它检测到呢?后面发现似乎可以通过configure时加入-I,-L选项以便让configure可以找到自己安装的库的头文件和库目录

编译Qt源码

如其他开源项目一样,根目录下的configure.bat就是Windows下的配置脚本,configure是linux下的配置脚本。
经过仔细分析这些脚本和项目架构,我并没有走一般的编译路线,而是分工程编译。
实际上,根目录中的configure.bat就是调用qtbase工程目录下的configure.bat,这个才是真正做事的脚本。它做了哪些事呢:确定平台和编译器,生成qmake的makefile,调用make生成qmake,然后会暂停让用户确认版权,执行“配置测试”,产生用户环境的报告 config.summary , 最后qmake生成后将自动调用脚本所在目录下的.pro文件,生成工程的makefile。查看config.summary可以确定Qt检测到的构建环境。
qmake是重点,以后其他所有工程都可交由qmake解析.pro来产生相应工程的makefile,有了makefile,执行make即可生成各个工程的库文件。

qbase工程是Qt的核心工程。我首先单独编译了这个工程。步骤: 创建D:\qt-build\qtbase目录,在该目录中执行构建配置:

D:\qt-src515\qtbase\configure.bat -prefix D:\Qt\Qt5.15.2\mingw1010_64 -debug-and-release -platform win32-g++ -opensource -confirm-license -nomake tests -skip qtwebengine  -qt-zlib -ssl -icu -opengl desktop

说明:-prefix 指定安装将会部署的位置,根据自己情况修改 ; -debug-and-release 指示编译生成debug版和release版的Qt库;-platform win32-g++ 指明编译平台是windows,并使用mingw编译器; -opensource -confirm-license 是为了自动确认开源证书,免得到时暂停手动确认;-nomake tests 不需要编译测试工程; -skip qtwebengine 暂时先不编译webengine模块,因为太大了 ;-qt-zlib -ssl -icu 指示检测这些库,并在需要时使用;-opengl desktop 明确指示使用你windows上安装的opengl驱动来编译程序,但这样编译出的程序在别的电脑上运行时需要目标电脑上安装的opengl驱动能兼容你的程序

关于命令选项的具体细节,可参考qtbase\config_help.txt。如上所述,配置成功后,就有了qtbase工程的makefile,现在可以执行make进行编译了:

mingw32-make -j16    #开启十六线程编译,根据自己电脑实际核心数调整

qmake的具体调用:qmake调用qbase.pro,-> load(qt_parts.prf) -> load(qt_configure.prf),
这里2356行函数在做环境测试,2394行qtConfProcessOutput输出Src和mkspecs下的所有文件。

make成功后将在D:\qt-build\qtbase里生成bin程序,头文件,库文件,接着执行安装部署,将安装到之前设置的-prefix目录。

   mingw32-make install

D:\Qt\Qt5.15.2\mingw1010_64\bin加入到环境变量path中,正如前所述,就可以方便地用qmake去构建其他任何工程以生成makefile,执行编译mingw32-make -j16 ,执行安装mingw32-make install

编译好一个模块后记得安装帮助文档,而不要立马就把编译生成目录给删了,不然再单单通过qmake生成makefile再编译文档是没法生成帮助文档的,因为编译时拷贝了很多源文件,生成文档时会去解析。

  1. 编译qch格式文档:mingw32-make docs
  2. 安装文档:mingw32-make install_docs

官网上的qtdoc-everywhere-src-5.15.2.zip和解压后的源码根目录中的qtdoc目录内容一样。这个其实是用来生成qt的整体介绍型帮助文档的,包括完全独立的html格式的,以及可以导入到Qt Assistant和Qt Creator中的qch格式的。具体操作及注意事项可见其目录中的README。编译这些不仅需要make还需要qdoc工具,qdoc包含在qttools工程中,但是注意,qdoc使用Clang解析C++代码,因此其依赖libclang。而Clang是LLVM Compiler Infrastructure Project中的一部分。所以需要安装LLVM6.0以上版本。

qmake -query 查qt安装目录配置

错误记录

qtmultimedia编译报错,
E:/msys2_x86_64/mingw64/x86_64-w64-mingw32/include/mfidl.h:3245:19: note: forward declaration of ‘IMFSourceResolver’ {aka ‘struct IMFSourceResolver’}
3245 | typedef interface IMFSourceResolver IMFSourceResolver;

执行qmake生成makefile时,使用qmake D:\qt-src515\qtmultimedia -- -no-wmf解决。

如果遇到其他问题,可以参考我前面发的官方文档。

Qt Creator的编译

有了前面的编译经验和认识,其实编译Creator也是相同的。完全可以把它看作是一个Qt写的项目而已。同样可以用qmake编译,但是Qt Creator的编译使用qmake的方式始终失败,最终是用cmake编译成功的。

–END–

敝人所言重在引导,并未细致入微,况且细枝末节,难以言表,还请灵活变通。


myAvatar

本文章已经生成可运行项目
### Windows 10 上编译和安装 Qt 5.15 源码教程 #### 准备工作 为了在 Windows 10 上顺利编译并安装 Qt 5.15源码,需先准备必要的开发环境。 - **安装 Visual Studio**: 推荐使用带有 C++ 工具集的 Visual Studio 版本。Visual Studio 是微软官方支持的集成开发环境 (IDE),能够提供强大的调试功能和支持[^2]。 - **获取 Perl 和 Python**: 这些脚本语言对于构建过程至关重要。可以从各自官方网站下载适用于 Windows 平台的稳定版,并确保它们被加入到系统的 PATH 环境变量中以便命令行调用。 - **Git 客户端**: 如果打算通过 Git 获取最新的源代码,则需要安装 Git for Windows。这同样应该添加至系统路径以方便操作。 #### 下载 Qt 源码 访问 Qt 官方 GitHub 仓库或其他可信镜像站点来克隆或下载压缩包形式发布的特定版本源文件。针对 Qt 5.15.x 版本而言,建议直接从官网链接下载完整的 tarball 或 zip 文件。 #### 配置与编译 打开命令提示符窗口(最好是管理员权限),切换到解压后的 Qt 源目录执行如下配置指令: ```bash configure.bat -debug-and-release -prefix %CD%\qtbase\bin -platform win32-msvc ``` 上述命令指定了生成模式为 Debug 和 Release 双重目标,并设定了安装位置以及所使用的平台工具链。根据个人需求可以适当调整参数选项。 接着运行 `jom.exe` 来加速多线程编译进程;如果没有 jom ,也可以采用默认的 nmake 。注意,在某些情况下可能还需要额外指定一些环境变量或者修改 configure 脚本来适应本地环境特性。 ```batch cd qtbase jom.exe -j8 || nmake ``` 这里 `-j8` 参数表示同时开启八个子任务进行并发处理,具体数值可根据计算机核心数灵活设定。 #### 测试与部署 当整个编译流程顺利完成之后,可以通过简单的测试程序验证新构建出来的库是否正常运作。最后一步就是将所有产物复制到预期的目标文件夹内完成最终部署。 ```batch nmake install ``` 此命令会把编译好的二进制文件及其关联资源放置于之前由 configure 设置的位置下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值