接触qt有一段时间了,要学习的东西很多,记录下在工作中解决的实际问题。
打包过程
软件打包都是大同小异的,主要是收集依赖项(库、资源图片等),使用打包工具(脚本)打包。话不多说,直接进入正题。
生成依赖项
把编译生成的exe文件拷贝到一个新目录。
此时要特别注意,不能通过命令行或git bash等工具执行指令,必须从选择qt自带工具,如下:
然后执行指令:windeployqt G:\win32_pkg\GameLiveDemo.exe
此时,win32_pkg目录下多了很多依赖文件。
拷贝第三方库
如果程序中有第三方库,运行会报错,根据提示拷贝第三方库即可。
此时,在本地电脑上可正常运行了。
拷贝VC运行环境
根据Qt使用的编译套件来选择运行库,笔者使用的是MSVC2017,去VS2017拷贝运行时库。本地参考路径:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.16.27012\x64\Microsoft.VC141.CRT
补全Qt运行环境
本以为所有依赖项均找到,发给同事运行报错,platforms里面只有一个dll文件。对比一下Qt安装目录,将其余的dll全部拷过来,运行就正常了。
注:如果运行还报错,可根据提示在bin目录下拷贝对应的文件。
使用Inno Setup打包
安装完Inno Setup
后,根据实际情况,修改以下脚本生成安装包。
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
;自定义项:MyAppName、MyAppVersion、MyAppPublisher、MyAppExeName
#define MyAppName "游戏直播Demo"
#define MyAppVersion "0.0.1"
#define MyAppPublisher "zego"
#define MyAppURL "..."
#define MyAppExeName "GameLiveDemo.exe"
;自定义项:AppId(应用ID,唯一)、 OutputBaseFilename(安装文件名)
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{E52068CF-F210-2CBA-A228-EC0282109BEA}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=/
OutputBaseFilename=游戏直播Demo
Compression=lzma
SolidCompression=yes
[Languages]
Name: "Chinese"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
[Files]
;依赖项:单个文件,或某一类文件
Source: "*.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "GameLiveDemo.exe"; DestDir: "{app}"; Flags: ignoreversion
;依赖项:文件夹
Source: "iconengines\*";DestDir: "{app}\iconengines\";
Source: "imageformats\*";DestDir: "{app}\imageformats\";
Source: "platforms\*";DestDir: "{app}\platforms\";
Source: "styles\*";DestDir: "{app}\styles\";
Source: "translations\*";DestDir: "{app}\translations\";
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent