Qt 应用都会依赖诸多类似 QtCore.dll、QtWidgets.dll 等的情况。然而会遇到开发多个应用的场景,但是,要为每一个应用都建立好依赖,会导致占用很大的空间。
因此,对于 QtCore.dll、QtWidgets.dll 这些共用的动态库,就可以将其放置在共享路径下,多个应用共享该动态库。
故,按照此思路,项目结构如下:
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
其他应用也是如此,最终如下图所示

在 QtCreator 中创建资源文件 "qml.qrc",添加前缀"/qt/etc/",并且添加 "qt.conf",内容如下
[Paths]
Prefix = ../env
ArchData = .
Data = .
Libraries = .
LibraryExecutables = .
Binaries = ./bin
Plugins = ./plugins
Imports = .
Qml2Imports = .
Translations = ./translations
至此,项目目录已创建完毕,但是注意, 一些主 dll 仍需要复制到 exe 同级路径下(例如Qt5Charts、Qt5Multimedia等),此时,每一个应用即可依赖共享库而独立运行。
