Qt 应用都会依赖诸多类似 QtCore.dll、QtWidgets.dll 等的情况。然而会遇到开发多个应用的场景,但是,要为每一个应用都建立好依赖,会导致占用很大的空间。
因此,对于 QtCore.dll、QtWidgets.dll 这些共用的动态库,就可以将其放置在共享路径下,多个应用共享该动态库。该章节仅讲述如何打包建立应用目录框架,需要手动添加环境变量,自动添加变量需要借助安装包工具(advance installer)加载,在后续文章中分享。
故,按照此思路,项目结构如下:
appSet/
├── env/ # 存放所有共用的 dll
│ │─ Qt5Core.dll
│ │─ Qt5Gui.dll
│ │─ ...
│ └── plugins/ # 存放 Qt 的插件路径
│ ├─ platforms/
│ │ └─ qwindows.dll
│ └─ ...
├── app_a/
│ ├─ app_a.exe # 应用A 主程序
│ └─ qt.conf # 配置文件
│
├── app_b/
│ ├─ app_b.exe # 应用B 主程序
│ └─ qt.conf # 配置文件
以 windows x64 为例,为了确保 Qt、C 依赖均被正确安装,因此第一步需要建立 Qt + VC 环境。
- 在 win 菜单中,运行 visual studio 中的 x64 Native Tools Command Prompt for VS 2022,即可进入 VC 环境;
- 找到电脑中 Qt 的安装路径,在对应构建套件中找到 qtenv2.bat 或 qtenv.bat,例如:D:\Qt\5.15.2\msvc2019_64\bin;
- 在 x64 Native Tools Command Prompt for VS 2022 窗口中,调用 D:\Qt\5.15.2\msvc2019_64\bin;
- 至此,就建立好了 Qt + VC 环境
将开发好的应用程序(appA.exe)复制到空白路径下,例如 appSet/appA/appA.exe,在命令行中切换到该路径,并执行
windeployqt --release --dir ../env --plugindir ../env/plugins appA.exe
其他应用也是如此,最终如下图所示
在每一个应用文件夹下创建 qt.conf,内容如下
[Paths]
Prefix = ../env
Plugins = ./plugins
Translations = ./translations
至此,项目目录已创建完毕,最后在系统环境变量PATH 中添加
,此时,每一个应用即可依赖共享库而独立运行。F:\appSet\env
若需要提供用户安装程序并自动创建环境变量,则需要用安装包工具,例如 advance installer 创建安装包,详情参考另一文章。