Qt之应用部署(Windows)

英文可以的同学建议直接看Qt for Windows - Deployment

简述

本文介绍了Qt在Windows上的部署过程。

Windows 部署工具

windeployqt是一个用于将Qt部署到Windows的小工具。这个工具可以在 QTDIR/bin/windeployqt下面找到。它需要在命令行环境下使用。

windeployqt以一个.exe或者一个含有.exe的文件夹作为参数。它会扫描可执行文件以寻找这个可执行文件的依赖。如果使用–qmldir选项传递目录,windeployqt会使用qmlimportscanner工具来扫描文件夹中的QML文件以获取QML导入的依赖。被扫描出来的依赖将会被复制到这个可执行文件夹中。

对于Windows桌面应用程序,编译器所需要的运行时文件也会被复制到部署文件夹中。

有时候应用程序可能会需要额外的第三方库(例如,数据库相关的库),这些库不会被windeployqt添加,需要手动添加。

更多关于windeployqt的信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Usage: windeployqt [options] [files]
Qt Deploy Tool 5.12.2

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.
  --qmlimport <directory>   Add the given path to the QML module search locations.
  --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.

部署演示

以我最近写的一个音乐播放器(还没写完)为例

在release模式下编译程序

安排.exe文件

在编译完成后会生成release版本的.exe文件,将其拷贝到某个文件夹下(自己觉得合适的地方)。

这时候点击它是无法运行的,因为它缺少相关的依赖文件。

执行windeployqt

在该文件目录中按shift+鼠标右击打开powershell,并在其中执行

1
windeployqt musicplayer1.exe

运行完后会在musicplayer.exe(部署目录)下面生成一堆的.dll文件。这下再次点击就可以运行了。如下所示:

引用

[1] Qt for Windows - Deployment