986 字
5 分钟

QT 6.2 msvc 2019 下 静态编译

环境准备#

QT 6 版本全面换成了 CMake,Win 下环境需要

CMake, Ninja, Perl, Python 官网要求

ToolSupported VersionsDescription
CMakeVersion 3.16 and newer (3.17 and newer for -debug-and-release builds 3.21 and newer for -static builds).Required for configuring the Qt build. Available in the Qt Online Installer and on cmake.org.
Ninja-Recommended tool for building Qt. Available in the Qt Online Installer and on ninja-build.org.
Perl-Required build tool. Popular Windows installers are ActiveState Perl and Strawberry Perl. Perl is also installed as part of Git.
PythonVersion 3Required build tool. Windows installers are available on python.org, or from the Microsoft Store.

关于 Perl 个人推荐 Strawberry Perl 版本新,安装方便。缺工具就去下,全部环境变量中配置好就行

编译环境选择:MinGW/MSVC#

在 Windows 上,有两个预构建环境可供选择:一个是 MinGW ,另一个是 Microsoft Visual Studio(MSVC)。这两个环境不兼容,无法混合。你必须选择一个。

这两者的区别如下:

当你的项目使用 MinGW 编译的使用,想要用一个 MSVC 编译生成的库时就会有问题。使用 MinGW 编译项目的时候,所使用的 Lib 也要是 MinGW 编译的。如果你只是开发 Window 平台的软件时,最好用 Qt MSVC 组合,这样可以使用大量的第三方 lib,还有很多的构建指令,毕竟 window 上 MSVC 才是王道。

我选择 MSVC,打开安装 VS 时自带安装的 MSCV:x64 Native Tools Command Prompt for VS 2019

不要使用 Developer Command Prompt for VS 2019

编译#

在随便什么盘里新建一个目录用来存放编译好的内容:D:\qt

x64 Native Tools Command Prompt for VS 2019的终端进入 Qt 源代码目录:

C:\Users\peter\Downloads>cd qt-everywhere-src-5.15.0
C:\Users\peter\Downloads\qt-everywhere-src-5.15.0>

(不推荐,可跳过)1.修改源码里的qtbase\mkspecs\common\msvc-desktop.conf文件#

修改-MD 为-MT

修改前:

QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd

修改后:

Terminal window
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd

D 的意思是动态编译(dynamic link),T 的意思是静态编译(static link)。 这一步官方教程没有要求

目的仅有让编译出来的 Win 上静态文件是最小的(不推荐使用)会导致 example 等动态链接的库无法使用编译好的静态 QT 编译

配置 config 文件:#

主要需要在 VS 2019 的命令行中运行,如果一次配置不通过,出错下一次也是无法通过的,因为有CMakeCache.txt 文件,需要删除上一步失败的CMakeCache.txt文件

我的配置文件:

Terminal window
configure.bat -static -prefix "D:\qt" -confirm-license -opensource -debug-and-release -platform win32-msvc -optimize-size -no-pch -nomake examples -nomake tests -nomake tools -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -qt-libjpeg -opengl desktop -mp

具体含义如下:

Terminal window
configure.bat
-static #指明静态编译
-prefix "D:\qt" #安装目录,最好使用不需要管理员权限的目录
-confirm-license -opensource #指明是开源版本
-debug-and-release #指明需要debug版和release版,可以单独选择release版
-platform win32-msvc #指明使用msvc编译,这里的win32并不指32位
-optimize-size #最优化文件大小而不是速度(可选)
-no-pch #不使用预编译头文件(可选)
-nomake examples -nomake tests -nomake tools #不编译用不上的东西
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -qt-libjpeg #可选插件
-opengl desktop #用系统自带的opengl
-mp #多核编译

如果无报错

接着运行

cmake --build . ---parallel //编译本目录,parallel为并行,即多核心编译
cmake --install . //安装命令

配置 QtCreator#

Qt version 下找到刚才编译的bin/qmake.exe

Kits 下选择刚才的 Qt version 注意编译器选择需要和上面编译时使用的一样

至此,编译完成

测试大小#

选择 release 模式编译,等待编译完成后打开编译文件夹,即可看到编译后的文件大小大约 12.7MB

如果是动态编译,再使用windeployqt个人测试的大小是 78MB 左右,所以还是静态编译时省事

参考#

最后感谢这些文章的作者,Thanks

Qt5.15 在 Windows 环境静态编译安装和部署的完整过程 VS 2019-Qt static link build Windows 64 bit

使用 MSVC2019 静态编译生成 Qt 库

At last, let’s build Qt statically

QT 6.2 msvc 2019 下 静态编译
https://blog.dccif.top/2021/11/11/QT-6-2-msvc-2019-静态编译/
作者
Barry He
发布于
2021-11-11
许可协议
CC BY-NC-SA 4.0