如何使 windeployqt 仅包含所需的模块?

Posted

技术标签:

【中文标题】如何使 windeployqt 仅包含所需的模块?【英文标题】:How to make windeployqt include only the needed modules? 【发布时间】:2020-10-26 04:46:50 【问题描述】:

由于对某些具有 GPL 许可证的 Qt 库的担忧(大多数都可用 LGPL),我们删除了项目中大多数未使用的依赖项。运行windeployqt后:

windeployqt.exe --dir setup --compiler-runtime --release --qmldir ..\Qml ..\release\OUREXE.exe

我们得到以下日志:

Direct dependencies: Qt5Core Qt5Gui Qt5Network Qt5Qml Qt5Quick Qt5WebSockets Qt5Widgets    Qt5WebEngineCore Qt5WebEngineWidgets Qt53DCore Qt53DRender Qt53DInput Qt53DExtras
All dependencies   : Qt5Concurrent Qt5Core Qt5Gamepad Qt5Gui Qt5Network Qt5Positioning Qt5PrintSupport Qt5Qml Qt5Quick Qt5QuickWidgets Qt5WebSockets Qt5Widgets Qt5WinExtras Qt5WebEngineCore Qt5WebEngineWidgets Qt53DCore Qt53DRender Qt53DQuick Qt53DQuickRender Qt53DInput Qt53DAnimation Qt53DExtras Qt5WebChannel
To be deployed     : Qt5Concurrent Qt5Core Qt5Gamepad Qt5Gui Qt5Network Qt5Positioning Qt5PrintSupport Qt5Qml Qt5Quick Qt5QuickWidgets Qt5SerialPort Qt5Svg Qt5WebSockets Qt5Widgets Qt5WinExtras Qt5WebEngineCore Qt5WebEngineWidgets Qt53DCore Qt53DRender Qt53DQuick Qt53DQuickRender Qt53DInput Qt53DAnimation Qt53DExtras Qt5WebChannel

如您所见,尽管 windeployqt 知道“需要”模块,但它似乎部署了所有 Qt 模块,甚至是未使用的模块。 我知道可以使用“--no-”选项手动排除模块,但我希望 windeployqt 自动检测并仅添加直接依赖项。有没有办法通过这个程序将部署的模块限制在最低限度?

【问题讨论】:

你能展示你的 QT+= 依赖吗?部署 GPL DLL 不是问题,因为您的软件没有使用它 @MiguelAngelPons 原来 Qt53DQuick 不是 QtQuick 3D 模块库。我看到了 Qt 5.12 的源代码,并意识到 QtQuick 3D 模块不是这个模块的一部分。 【参考方案1】:

原来 Qt53DQuick 不是 QtQuick 3D 模块库。 Qt 5.12.x 没有 QtQuick 3D 模块,dll 是 Qt3D 模块的一部分。

【讨论】:

以上是关于如何使 windeployqt 仅包含所需的模块?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 windeployqt 输出不需要的文件,我该如何摆脱它们?

Qt 最小部署

如何/如果仅使用表单和数据模块重构 Delphi 程序

我们是否应该将所有必需包及其依赖包放在requirement.txt或仅包含所需的包

如何使我的函数在 ArrayList 上运行得与“包含”一样快?

ms 访问查询仅检索所需的值