使用MinGW进行静态编译Qt

Build Tools

  • CMake (可通过 Qt online installer 安装)

  • Ninja (可通过 Qt online installer 安装)

  • ActivePerl (使用 Chocolatey 安装)

  • Python (使用 Chocolatey 安装)

安装 Build Tools

使用 Chocolatey 和 Qt online installer 安装 Build Tools

安装 Chocolatey

PowerShell 下运行

1
2
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

安装 Perl & Python

1
2
choco install python3
choco install activeperl

安装 CMake & MinGW & Ninja

在 Qt oneline installer 中勾选 MinGWCMakeNinja

检查环境

可执行二进制文件 cmake.exe, ninja.exe, perl.exe, 和 python.exe 必须添加到环境变量中且可用

修改以下路径且添加到 PATH 变量

  • D:\software\Qt\Tools\CMake_64\bin
  • D:\software\Qt\Tools\mingw1120_64\bin
  • D:\software\Qt\Tools\Ninja

清华大学镜像源下载源码

在本地路径新建文件夹D:\software\Qt\6.2.4\mingw_624_static,预留120G 空间。

编译指令为:

1
2
3
4
5
6
#生成cmake配置文件
./configure -release -static -static-runtime -confirm-license -opensource -platform win32-g++ -nomake examples -prefix "D:\software\Qt\6.2.4\mingw_624_static"  -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -qt-harfbuzz -qt-sqlite  -qt-tiff -qt-webp 
#使用cmake编译
cmake —build . —parallel
#使用cmake安装
cmake --install .

参考链接

Windows 下 MinGW Qt6.0.2 静态编译步骤_

MingW8.1.0静态编译Qt6.2.4记录)

cmake项目设置静态部署

1
set(CMAKE_EXE_LINKER_FLAGS -static)

使用MSVC进行编译Qt

配置环境参考上方内容,添加LLVM

清华大学镜像源下载源码

修改源码里的qtbase\mkspecs\common\msvc-desktop.conf文件(非必须,建议不改)

修改-MD为-MT

1
2
3
QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG = -Zi -MDd

改为

1
2
3
QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG = -Zi -MTd

在x64 Native Tools Command Prompt for VS 2022 里进入Qt源代码目录

编译命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#配置config文件
#./configure.bat -static -prefix "D:\software\Qt\6.2.4\MSVC2022_x64_static" -confirm-license -opensource -debug-and-release -platform win32-msvc -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp

#..\Src\configure.bat -static -prefix "D:\Qt\6.2.4-static" -debug-and-release -platform win32-msvc

configure.bat -static -prefix "D:\software\Qt\6.2.4\MSVC2022_x64_static" -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

# -static-runtime -qt-freetype -qt-harfbuzz -qt-tiff -qt-webp 
#编译
#nmake
cmake --build . --parallel 6
#构建完后清理一下中间文件
#nmake clean
#安装
# nmake install
cmake --install .

具体含义如下:

1
2
3
4
5
6
7
8
9
10
11
12
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 #多核编译

编译后添加到Qt Create与VisualStudio2022中只有64位Release版本,没有Debug版本

附录

移动编译好的qt位置时添加QtKit会失败,解决方法为在qmake.exe相同目录下创建qt.conf文件。

1
2
[paths]
Prefix = ..

参考资料

QT 6.2 msvc 2019 下 静态编译