windeployqt 复制了很多不需要的文件

Posted

技术标签:

【中文标题】windeployqt 复制了很多不需要的文件【英文标题】:windeployqt copies a lot of unneeded files 【发布时间】:2019-01-07 17:44:46 【问题描述】:

我正在使用 windeployqt 为一个非常简单的 Hello World 类型的 QML 应用程序创建一个具有正确依赖项的可执行文件。使用这个时,用命令

windeployqt . --release --qmldir D:\Documents\QT-Projects\HelloQML

在包含可执行文件的文件夹中。这工作正常,我可以毫无问题地运行可执行文件。但是,我发现我可以删除目录中的许多文件和文件夹,而不会影响程序的运行。为了比较,这里是原始文件夹内容。 这是我删除所有可以删除的内容后的文件夹,同时仍然允许程序运行(我没有尝试删除任何子文件夹中的任何内容)。 有没有办法让windeployqt 不复制这么多不必要的项目?

【问题讨论】:

这个问题很老了,我来到这里寻找类似问题的解决方案。但是,我必须补充一点,仅仅因为您可以在您的 PC 上运行该应用程序并不意味着其他人可以在他们的 PC 上执行此操作。该应用程序在可执行文件夹中查找dll 文件,然后在其他 Windows 文件夹中查找。如果您安装了 Qt 编译器,它将在那里找到 dll 文件。因此,您将能够在您的 PC 上运行该应用程序,但没有安装 qt 的 PC 将无法运行。 【参考方案1】:

如果您使用最新的 Qt 版本之一,您可以选择不复制哪些文件。

不使用翻译和 OpenGL 的二进制文件,例如可以使用:

windeployqt.exe C:\sample\sample.exe --no-translations --no-opengl-sw

有关更多信息,您可以运行:

windeploy --help

Usage: windeployqt [options] [files]
Qt Deploy Tool 5.12.0

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help            Displays this help.
  -v, --version             Displays version information.
  --dir <directory>         Use directory instead of binary directory.
  --libdir <path>           Copy libraries to path.
  --plugindir <path>        Copy plugins to path.
  --debug                   Assume debug binaries.
  --release                 Assume release binaries.
  --pdb                     Deploy .pdb files (MSVC).
  --force                   Force updating files.
  --dry-run                 Simulation mode. Behave normally, but do not
                            copy/update any files.
  --no-patchqt              Do not patch the Qt5Core library.
  --no-plugins              Skip plugin deployment.
  --no-libraries            Skip library deployment.
  --qmldir <directory>      Scan for QML-imports starting from directory.
  --no-quick-import         Skip deployment of Qt Quick imports.
  --no-translations         Skip deployment of translations.
  --no-system-d3d-compiler  Skip deployment of the system D3D compiler.
  --compiler-runtime        Deploy compiler runtime (Desktop only).
  --no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
  --webkit2                 Deployment of WebKit2 (web process).
  --no-webkit2              Skip deployment of WebKit2.
  --json                    Print to stdout in JSON format.
  --angle                   Force deployment of ANGLE.
  --no-angle                Disable deployment of ANGLE.
  --no-opengl-sw            Do not deploy the software rasterizer library.
  --list <option>           Print only the names of the files copied.
                            Available options:
                             source:   absolute path of the source files
                             target:   absolute path of the target files
                             relative: paths of the target files, relative
                                       to the target directory
                             mapping:  outputs the source and the relative
                                       target, suitable for use within an
                                       Appx mapping file
  --verbose <level>         Verbose level (0-2).

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents enginio
gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets

script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation
3dextras geoservices webchannel texttospeech serialbus webview

Arguments:
  [files]                   Binaries or directory containing the binary.

【讨论】:

【参考方案2】:

将您的应用程序部署到另一台 PC 时可能需要其中一些文件。 例如,您删除了opengl32sw.dll。 我发现这个 dll 并不存在于所有 PC 上,它需要成为安装的一部分。

【讨论】:

以上是关于windeployqt 复制了很多不需要的文件的主要内容,如果未能解决你的问题,请参考以下文章

Qt 最小部署

Qt 教你使用windeployqt工具来进行Qt的打包发布

使用QT自带命令行来打包程序

Qt windeployqt 导致部署不可用

Qt官方开发环境生成的exe发布方式--使用windeployqt

Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)