Qt6.5 LTS Windows使用VS2019编译
- 目的
- 编译主机环境
- 编译依赖项
- 方式1、 使用自定义.bat脚本编译
- 编写脚本编译
- 使用示例
- 方式2、使用官方configue脚本进行编译
目的
鉴于之前一直使用的是Qt5,现在Qt6已经出到Qt6.6了,弄个Qt6尝尝鲜吧,但是从Qt5.15后不再提供安装包了,所以需要自己编译或者在线安装, 这里我们选择自己静态编译Qt6.5 LTS长期支持版本
编译主机环境
系统:Win11 家庭版
处理器:12th Gen Intel® Core™ i5-12400F 2.50 GHz
内存:16.0 GB
编译依赖项
1.cmake(>=3.16; >3.18.4 若需要使用 Ninja;>=3.19 若需要编译WebEngine; >=3.21.1若静态编译Qt6.2+)
2.C++支持:C++17
3.Ninja
4.Perl(>=5.14, optional for Qt >= 6.5)
5.Python(>=2.6.x;>=3.6.x, html5lib等,若需要编译WebEngine)
6.Node.js (若需要编译WebEngine)
7.系统编译器: Visual Studio 2022 或 Visual Studio 2019(最低要求), MinGW 11.2
补充说明:静态编译Qt6.2以上版本,cmake版本必须大于3.21.1, VS版本必须最低要求是VS2019
为了防止环境污染,可不把以上安装的工具声明到系统环境变量, 而是声明在当前执行的终端下:
set PATH=D:\program\python3.8;D:\program\cmake-3.21.2\bin\;D:\program\Ninja;D:\program\Perl-5.32.1.1\bin\;%PATH%
方式1、 使用自定义.bat脚本编译
编写脚本编译
(1)MD编译:下载Qt6.5.1源码,解压,新建脚本build_vs2019_static_md_release.bat如下
@echo off
set "BUILD_TYPE=release"
set "DIR=msvc2019_x64_static_md"
set "INSTALL_DIR=%DIR%_%BUILD_TYPE%"
set "SLN_DIR=%INSTALL_DIR%_sln"
set "SRC_DIR=."
call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
cmake -S %SRC_DIR% -B %SLN_DIR% -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
-DQT_BUILD_TESTS=FALSE -DQT_BUILD_EXAMPLES=FALSE -DCMAKE_MAKE_PROGRAM=ninja.exe -G "Ninja"
cmake --build %SLN_DIR% --config %BUILD_TYPE% --parallel
cmake --install %SLN_DIR% --config %BUILD_TYPE% --prefix=%INSTALL_DIR%
补充说明:要生成debug版本静态库,修改set “BUILD_TYPE=debug”,如果是系统是32位系统,则修改call “D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat”,此句作用是把vc编译器相关的环境变量加载进来
终端下执行脚本,在N秒后编译完成在目录下会生成编译结果文件:
库文件目录:
如果编译的是debug版本, 这里的库文件都会带一个d,如Qt6Cored.lib
(2)MT版本编译(本篇幅着重MD静态编译版本,MT编译按照如下修改进行编译):
打开源码目录 qtbase\mkspecs\common\msvc-desktop.conf
将 QMAKE_CFLAGS_XXXXXXX 中的MD 、MDd 替换为MT 、MTd
这里为了区分目录修改:set “DIR=msvc2019_x64_static_mt”。
编译过程会自动侦测依赖项去编译,找不到依赖项的如:QtPdf依赖python的html5lib, 如果没有安装,此模块将不会编译支持,WebEngine依赖Node.js。本教程只做部分模块支持编译, 更多的模块支持需要把相关依赖项准备好后进行编译。
使用示例
使用qtcreator新建一个gui的cmake工程,运行后结果如下:
使用静态编译的程序不需要依赖其他动态库, 静态编译release版的空白GUI项目,执行文件大概15M左右
如果使用工具对exe进行压缩,可以缩小一半左右到7M左右
UPX exe压缩工具:https://github.com/upx/upx/releases
方式2、使用官方configue脚本进行编译
采用官方提供的脚本编译,那么跟Qt5时代一样,直接执行configure文件
需要注意的一点是最好是在vs的提供的终端下执行,如下:
- 静态库编译
…\configure -static -prefix D:\Qt6_msvc64\ -debug-and-release -opensource - 动态库编译
…\configure -prefix D:\Qt6_msvc64\ -debug-and-release -opensource - cmake --build . --parallel
- cmake --install .
作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正