0、参考文档
Qt for Windows - Building from Source | Qt 6.9
QT6.7.2源码编译 静态库 动态库 (MSVC) - Dir-A - 博客园
1、安装VS2022环境
VS2022包括社区版、专业版、企业版,安装哪个版本都可以。
下载地址:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux
安装时,工作负载(workloads)必须选择“桌面C++开发”,右边的详细列表勾上“cmake”即可。
VS2022安装完成后,自带了 ninja和cmake组件,不必额外安装了。
打开cmd.exe, 输入: where ninja 和 where cmake , 确认这些组件已经安装好了,否则需要额外安装。
2、下载并安装python
打开cmd.exe, 输入: where python,如果没有安装,则需要安装,要求3.x版本。
下载地址:https://www.python.org/downloads/windows/, 选择 windows x64版本,下载完成后默认安装即可。也可以在系统自带的“微软商店”下载安装。
3、下载Qt源码
官方下载地址:Index of /archive/qt
清华大学镜像:Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
选择当前最新版本下载。
4、编译Qt源码
可选择MSVC或MinGW。在windows平台,我们选择MSVC,调试和运行都友好。
1)配置编译选项
在D盘新建文件夹“BuildStaticQt”,拷贝源码到这里,然后解压到当前目录,进入 qtbase\mkspecs\common 目录,打开msvc-desktop.conf文件,将 -MD 全部替换为 -MT
2)配置make选项
在文件夹“BuildStaticQt”新建子目录“build”,打开cmd.exe,依次执行命令以下命令:
- “D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat” amd64 (具体路径要看VS安装到了哪里)。
- cd /d d:\BuildStaticQt\build
- ..\qt源码目录\configure.bat -static -static-runtime --prefix="D:\Qt\qt6.9-static" -confirm-license -opensource -debug-and-release
说明:
qt6.9 : 当前源码是6.9版本,如果是其他版本请修改为相应的版本号;
-static : 静态编译Qt;
-static-runtime : 把VC的运行时打包到exe文件;
--prefix : Qt的安装路径;
-confirm-license :同意源码使用协议;
-opensource : 使用开源协议;
-release :编译release版本;
如果configure 报错,删除源码目录的CMakeCache.txt缓存文件,然后根据错误提示修改configure选项,再次执行。
3)编译
在上面的命令行中执行命令:cmake --build . --parallel
等待完成,时间比较长,几个小时。
可能有些组件会编译失败(如Qt6Pdf.lib),如果不是必须组件,可以不理会。
4)安装
在上面的命令行中执行命令:cmake --install .
5)完成
可以把 D:\BuildStaticQt目录删除,也可以留着,下次修改了某些配置选项后继续编译就比较快了。
5、写demo程序
从官网下载安装QtCreator(如果已经安装了其他Qt版本,则会自带QtCreator,不用再安装)。
1)添加“Qt版本”。
打开QtCreator,点击菜单栏【编辑】-->【首选项】, 在“首选项”对话框中按下图操作:
然后添加静态Qt版本就完成了,见下图:
2)添加“构建套件”
按下图操作:
3)Demo程序
点击菜单栏【文件】-->【新建工程】,然后按下图操作:
其他向导界面保持默认,“选择构建套件”按下图选择:
按向导完成新建工程,然后编译、运行,demo完成。
把demo程序拷贝到其他未安装Qt编译环境的电脑,双击运行,如果成功了,说明环境静态Qt环境大功告成!见下图:
6、LGPL协议注意事项
使用静态编译版本的Qt开发环境编译的产品,有被迫开源的风险,要注意预判和隔离风险。可以把产品分为几个部分以隔离此类风险,如:保密代码.dll ,非保密代码.exe。其中保密代码.dll不使用“静态Qt”编译,不需要开源;非保密代码.exe使用“静态Qt”编译,需要开源。
使用Qt的预编译版本,或者自己编译为动态库版本,则不需要开源,但是部署时需要带上Qt的运行时(一堆Qtxxx.dll)。