本文将介绍在 Windows 11 系统上使用 Visual Studio 2022 编译 Qt 5.15.17 源码的整个过程。
环境准备
在开始编译之前,请确保你已经安装并配置好以下软件和工具:
Visual Studio 2022编译器
安装时请确保勾选 “使用 C++ 的桌面开发” 工作负载
Qt源码
从 Qt 官方归档下载源码压缩包Qt5.15.17下载源码压缩包后并解压到一个不包含中文和空格的路径下
https://download.qt.io/archive/qt/5.15/5.15.17/single/qt-everywhere-opensource-src-5.15.17.zip
Clang工具
libclang用于编译Qt文档模块
https://download.qt.io/development_releases/prebuilt/libclang/libclang-release_60-windows-vs2015_64-clazy.7z
python2.7
QtWebEngine 模块需要 Python 2.7 版本,请从Python 官网下载并安装
https://www.python.org/downloads/release/python-2718
Perl
推荐使用 Strawberry Perl
https://strawberryperl.com
OpenSSL
从 OpenSSL 官网下载并编译安装 OpenSSL v1.1.1系列的版本,例如 Win64 OpenSSL v1.1.1w。具体可参考本博客中SSL编译教程
https://openssl-library.org/source
Node.js
推荐12及以后版本可以从Node.js官网下载
https://nodejs.org/zh-cn
配置环境变量
为了让编译脚本能够找到所需的工具,你需要将以下目录添加到系统的 PATH 环境变量中:
python、Perl、Node.js工具安装时注意勾选添加到环境变量
libclang工具下载解压后,将其bin目录加入到系统环境变量中
ANGLE 依赖于 GnuWin32 和 Win flex-bison 项目中的以下额外工具,这些工具位于qt源码中 gnuwin32/bin 文件夹中,我们需要将其加入到环境变量中:
注意:请根据你的实际安装路径进行调整。
编译Qt源码
SSL配置
如果您自行编译 Qt,可以通过设置 -openssl / -openssl-runtime 或 -openssl-linked 配置标志来配置 Qt 使用 OpenSSL 的方式。
如果在常规编译器包含目录和库目录中未找到 OpenSSL,可以设置 OPENSSL_PREFIX、OPENSSL_INCDIR 和 OPENSSL_LIBDIR 配置参数。如果设置了 OPENSSL_PREFIX,则 OPENSSL_INCDIR 默认为 OPENSSL_PREFIX/include,OPENSSL_LIBDIR 默认为 OPENSSL_PREFIX/lib。
可以通过设置 OPENSSL_LIBS、OPENSSL_LIBS_DEBUG 和 OPENSSL_LIBS_RELEASE 配置参数来调整实际要链接的库。
1.要在运行时加载 OpenSSL,请设置 -openssl-runtime 配置参数。 Qt 会尝试在编译器的默认包含路径中查找 openssl/ssl.h 和 openssl/opensslv.h。您可以通过设置 OPENSSL_INCDIR 来指定额外的包含目录。
这种方法在后期使用与编译自己开发的软件中,如果使用到网络模块,没有在软件中引入ssl相关动态链接库,软件依然可以正常启动。
configure -openssl-runtime OPENSSL_INCDIR="C:\Program Files\OpenSSL-Win64\include"
2.要将 Qt Network 与 OpenSSL 库链接,请设置 -openssl-linked 配置参数。使用 OPENSSL_PREFIX 变量可以让 Qt 正确定位并根据你的 OpenSSL 安装进行构建:
这种方法在后期使用与编译自己开发的软件中,如果使用到网络模块,没有在软件中引入ssl相关动态链接库,软件依然无法正常启动,必须将ssl相关链接库复制粘贴到项目的编译目录中。
configure -openssl-linked OPENSSL_PREFIX="C:\Program Files\OpenSSL-Win64"
3. 要将 Qt Network 链接到 OpenSSL 库的静态版本,请设置 -openssl-linked 参数,并设置 OPENSSL_PREFIX、OPENSSL_INCDIR 和 OPENSSL_LIBDIR。此外,您可能需要设置 OPENSSL_LIBS、OPENSSL_LIBS_DEBUG 和 OPENSSL_LIBS_RELEASE 配置参数,以便 Qt 能够正确链接到您构建的 OpenSSL 库的静态版本。
set OPENSSL_DIR=C:\Program Files\OpenSSL-Win64
configure -openssl-linked OPENSSL_INCDIR="%OPENSSL_DIR%\include" OPENSSL_LIBDIR="%OPENSSL_DIR%\lib\VC\static" OPENSSL_LIBS="-lWs2_32 -lGdi32 -lAdvapi32 -lCrypt32 -lUser32" OPENSSL_LIBS_DEBUG="-llibssl64MDd -llibcrypto64MDd" OPENSSL_LIBS_RELEASE="-llibssl64MD -llibcrypto64MD"
在确定好ssl的链接方式后可以正式开始编译qt源码,本文采用第一种方式进行编译。
1. 打开命令行工具
在Windows搜索中找到X64 Native Tools Command Prompt for VS2022
2. 切换到qt源码目录
3. 配置编译选项
使用 configure 命令配置编译选项。以下是一个推荐的配置示例:
.\configure.bat -prefix "D:\Qt\Qt5.15.17" -shared -confirm-license -opensource -debug-and-release -optimized-tools -sql-sqlite -qt-sqlite -qt-zlib -qt-libpng -qt-libjpeg -qt-tiff -qt-webp -platform win32-msvc -openssl-runtime OPENSSL_INCDIR="E:\openssl\include" -mp -recheck-all
常用配置选项说明:
- -prefix "D:\Qt\Qt5.15.17":指定 Qt 的安装目录。
- -debug-and-release:同时编译 Debug 和 Release 版本的库。
- -opensource:使用开源版本的 Qt。
- -confirm-license:自动确认许可协议。
- -shared:编译为动态链接库(DLL)。如果需要静态库,请使用 -static。
- -platform win32-msvc:指定目标平台和编译器。
- -nomake examples:不编译示例。
- -nomake tests:不编译测试。
- -skip qtwebengine:跳过 QtWebEngine 模块的编译。
- -openssl-runtime "OPENSSL_INCDIR=D:\openssl\include" "OPENSSL_LIBDIR=D:\openssl\lib":指定 OpenSSL的头文件和库文件路径。
4. 执行编译源码
nmake
注意:编译过程会花费较长时间,请耐心等待。
5. 安装Qt
nmake install
6. 编译Qt文档
nmake docs
7. 安装Qt文档
nmake install_docs
参考链接
libclang编译qt文档模块版本问题 https://forum.qt.io/topic/146927/5-15-10-build-failed-with-qdoc
Qt官方编译教程-编译命令 https://doc.qt.io/archives/qt-5.15/windows-building.html
Qt官方编译教程-环境配置 https://doc.qt.io/archives/qt-5.15/windows-requirements.html
Qt官方编译教程-Web模块 https://doc.qt.io/archives/qt-5.15/qtwebengine-platform-notes.html#windows
评论