文章目录
-
- [0. 准备工作](#0. 准备工作)
- [1. 使用 `windeployqt` 提取必要的动态链接库和资源文件](#1. 使用
windeployqt
提取必要的动态链接库和资源文件) -
- [1.1 操作步骤](#1.1 操作步骤)
- [1.2 补充](#1.2 补充)
- [2. 使用 `Enigma Virtual Box`将文件夹打包成单个exe](#2. 使用
Enigma Virtual Box
将文件夹打包成单个exe) -
- [2.1 操作步骤](#2.1 操作步骤)
0. 准备工作
Qt程序打包用到的工具有:
windeployqt
:安装Qt时自带Enigma Virtual Box
下载地址 :免费软件
1. 使用 windeployqt
提取必要的动态链接库和资源文件
★说明: 本文仅以笔者自己的Qt程序为例进行介绍,具体项目请作相应的修改。
1.1 操作步骤
-
步骤1. 新建文件夹,命名为
iap
-
步骤2. 拷贝这执行文件
从Qt工程中的release文件夹中,将可执行文件拷贝到步骤1中新建的文件夹中
-
步骤3. 打开Qt终端
打开对应的Qt终端,本例中使用MinGW左编译器,因此打开Qt6.5.2(MinGW 11.2.0 64-bit)
在终端中进入到步骤1中创建好的文件夹
-
运行 windeployqt
指令如下
sh
windeployqt appstm32iap_desktop.exe --qmldir D:\src\qt_ws\stm32iap_desktop\build-stm32iap_desktop-Desktop_Qt_6_5_2_MinGW_64_bit-Release
其中使用 --qmldir
指定了QML-Imports
的搜索路径,本例中该路径为工程中release的文件夹。
1.2 补充
补充1 :
在其他的博客中仅使用windeployqt appstm32iap_desktop.exe
即可完成。但在实际操作的过程中,打包完的exe无法运行(双击无反应),加入 --qmldir
后问题解决。再此作为参考。
补充2
windeployqt
具有的功能还有很多,一下列出--hekp-all
的信息。
bash
(base) PS C:\Users\HY\Desktop\iap> windeployqt --help-all
Please specify the binary or folder.
Usage: C:\Users\HY\anaconda3\Library\bin\windeployqt.exe [options] [files]
Qt Deploy Tool 5.15.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 help on commandline options.
--help-all Displays help including Qt specific options.
-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.
--ignore-library-errors Ignore errors when libraries cannot be found.
--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.
--translations <languages> A comma-separated list of languages to deploy
(de,fi).
--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-virtualkeyboard Disable deployment of the Virtual Keyboard.
--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.
补充3
在windeployqt``可以加入--no-(xml)
选项,以减少打包后的大小。本例中加入前为123MB,加入后减为57MB。最终的命令如下。
bat
D:\Qt\6.5.2\mingw_64\bin\windeployqt.exe ^
appstm32iap_desktop.exe --qmldir D:\src\qt_ws\stm32iap_desktop\build-stm32iap_desktop-Desktop_Qt_6_5_2_MinGW_64_bit-Release ^
--no-opengl-sw ^
--no-translations ^
--no-system-d3d-compiler ^
--no-3danimation ^
--no-3dcore ^
--no-3dextras ^
--no-3dinput ^
--no-3dlogic ^
--no-3dquick ^
--no-3dquickanimation ^
--no-3dquickextras ^
--no-3dquickinput ^
--no-3dquickrender ^
--no-3dquickscene2d ^
--no-3drender ^
--no-quick3d ^
--no-multimedia ^
--no-svg ^
--no-svgwidgets ^
--no-quick3d ^
--no-quick3dassetimport ^
--no-quick3dassetutils ^
--no-quick3deffects ^
--no-quick3dhelpers ^
--no-quick3dhelpersimpl ^
--no-quick3diblbaker ^
--no-quick3dparticleeffects ^
--no-quick3dparticles ^
--no-quick3dphysics ^
--no-quick3dphysicshelpers ^
--no-quick3druntimerender ^
--no-quick3dutils ^
--no-qmlintegration ^
--no-qmllocalstorage ^
--no-qmlxmllistmodel ^
--no-virtualkeyboard ^
--no-sql ^
--no-statemachine ^
--no-statemachineqml ^
--no-concurrent ^
--no-quicktimeline ^
--no-quicktest
可将上面指令保存到.bat
的文件中,在Qt终端中运行。
2. 使用 Enigma Virtual Box
将文件夹打包成单个exe
上述操作后,程序虽然被提取出工程文件夹,但依然需要进入文件夹,双击可执行程序运行。该部分将上述创建的文件夹整体打包成可执行的exe文件。步骤如下。
2.1 操作步骤
- 步骤1:安装
Enigma Virtual Box
,从官方网站进行下载,并安装(下载地址 )。 - 步骤2:选择输入的exe文件,即上述新建文件夹中的可执行文件
- 步骤3:选择输出的文件名。默认状态下与输入exe文件同目录,可以进行修改
- 步骤4:添加程序运行的配套文件。
在步骤3中选择上述新建文件夹,点击确定和OK完成添加。
最终配置结果如下,点击Process
即可生成。
结果展示