Qt之程序發佈以及打包成exe安裝包(轉載)

本文僅供自己學習之用

轉自:https://www.cnblogs.com/linuxAndMcu/p/10974927.html

一、簡述

Qt 項目開發完成之後,需要打包發佈程序,而因爲用戶電腦上沒有 Qt 配置環境,所以需要將 release 生成的 exe 文件和所依賴的 dll 文件複製到一個文件夾中,然後再用 Inno Setup 打包工具打包成一個 exe 安裝包,就可以發佈了。

 

回到頂部

二、設置應用程序圖標

我們編譯好生成的 exe 文件的圖標是 Qt 自帶的一個白色的框框,不太好看,怎麼能夠自己設置程序的圖標呢。先創建一個 ico 格式的文件,網上有很多在線就可以把 png 或 jpg 的圖片轉成 ico 格式的圖標文件,然後把 ico 文件放到源代碼目錄下,就是 .pro 文件的同一文件夾下。

 

在.pro項目文件中添加:

RC_ICONS = car.ico // 這裏的car.ico是我的ico文件的名字,改成你自己的ico文件名

 

添加完後一定要重新 qmake 一遍,然後再運行一遍你的程序,這樣再看你的 debug 或者 release 文件夾下的 exe 文件就會有你設置好的圖標了。

 

回到頂部

三、發佈程序

發佈程序首先要獲得所依賴的 dll 文件,這裏有兩種方法。方法一就是去 Qt 安裝目錄的 bin 目錄(筆者這裏是F:\technology\Qt5.9.7\5.9.7\mingw53_32)中找所依賴的 dll 文件。方法二就是使用 Qt 自帶的發佈程序工具 windeployqt.exe,可以生成所依賴的 dll 文件。這裏着重講解第二種方法,步驟如下:

(1)以 Release 方式編譯生成 exe 程序,也就是調試運行的方式選擇 Release

 

運行成功後,如果勾選了 “shadow build” 將源碼路徑和構建路徑分開,那麼將在 build-cleanRobot-Desktop_Qt_5_9_7_MinGW_32bit-Release 文件夾下生成 exe 文件,如下圖1所示; 否則在源碼工程目錄下的 release 文件夾下生成 exe 文件,如下圖2所示。

 

將 cleanRobot.exe 可執行文件複製到別的文件夾下,這裏我複製到 F:\cleanRobot 下,然後在 “開始菜單Qt5.9.7” 下找到 “Qt 5.9.7 for Desktop cmd” 運行文件,打開運行。

 

執行 cd F:\cleanRobot 命令進入exe 文件所在目錄下, 再執行 dir 命令查看目錄,最後執行 windeployqt cleanRobot.exe 命令,Qt 就會自動把該程序所需要的所有 dll 拷貝過來。

 

當然有可能有些 dll 不是我們需要的,例如下面的 D3Dcompiler_47.dll,爲了使發佈程序儘可能的小,可以把這些 dll 一個一個刪掉,再打開 exe 程序,看哪些 dll 是刪掉後就打開不了程序的,保留下來,剩下的刪除即可。

再將自帶文件夾,例如下圖的 image 文件夾複製過來,刪掉不必要的 dll,之後的 exe 安裝包文件夾如下圖所示。

其實到這一步,就可以將整個文件夾發佈出去了,但如果想打包成一個 exe 安裝包,就要進行下面的步驟了。

 

回到頂部

四、打包程序

Inno Setup 是一個免費的 Windows 安裝程序製作軟件,小巧、簡便、精美是其最大特點,支持 pascal 腳本,能快速製作出標準 Windows2000 風格的安裝界面,足以完成一般安裝任務。

官方下載地址:http://www.jrsoftware.org/isdl.php#stable

下載後直接安裝即可。

項目開發完成之後,需要打包程序發行,可以使用 Inno Setup 軟件製作安裝 exe。以下詳細講解如何打包應用程序:

 

(1)打開 Inno Setup Complier,點擊 【file】→【new】,新建一個腳本嚮導程序,然後點擊【next】;

img

 

(2)在應用程序信息中輸入 “應用程序名稱”、“應用程序版本”、“應用程序發佈者”、“應用程序網站”,這些信息會自動在腳本中生成,然後點擊下一步;

img

 

(3)自定義打包文件的的輸出地址以及輸出文件夾的名稱,然後點擊下一步;

img

 

(4)選擇應用程序的主執行文件,也就是你編譯生成的 exe 文件,下面點擊 “Add folder ”,把所有你的程序運行需要的 dll 和資源以及配置文件放在一個文件夾裏,選擇這個文件夾,然後點擊下一步;

img

注:Add folder 添加 .exe 的父文件夾,將依賴的 dll 等文件全部包含在內。

 

(5)輸入應用程序在開始菜單中顯示的名字,需要哪些功能,在前邊打上對勾,一般默認即可,然後點擊下一步;

img

 

(6)這裏可以選擇 “許可文件”,“安裝前的文件”(如 Readme 文件等),“安裝後顯示信息” 等,然後點擊下一步;

img

 

(7)選擇 “安裝語言”,然後點擊下一步;

img

 

(8)選擇 “自定義編譯器輸出文件夾”、“編譯器輸出基本文件名”、“自定義的安裝程序圖標文件”及“安裝密碼”,然後點擊下一步;

img

注:第一個選項表示的是生成的 安裝包*.exe 的輸出目錄。icon文件是 安裝包*.exe 的圖標文件。

 

(9)在這裏選擇是否使用 #define 編譯指令,選擇 yes 也就是在生成的腳本里使用 #define 宏定義一些常量,方便腳本編寫,勾不勾選隨意,然後點擊下一步;

img

 

img

 

前面最後一步中間會詢問你是否立即編譯新的腳本,這個腳本是根據剛纔我們前面填寫的那些內容自動生成的。可以直接使用編譯,也可以自己重新編寫,下面貼出生成的腳本代碼。

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "紅牌檢測系統"
#define MyAppVersion "2.5"
#define MyAppPublisher "SHIOTC, Inc."
#define MyAppURL "http://www.shiotc.com/"
#define MyAppExeName "redplate_qt.exe"

[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={{D21B4F6B-401E-4575-B6E1-612A9CA50D58}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:/redplate_detection_v2.5
DefaultGroupName=redplate_detection_v2.5
OutputDir=E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release
OutputBaseFilename=redplate_detection_2.5
;SetupIconFile=E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release\ICON.ico
Password=123456
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release\redplate_qt.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
  • 運行過程中出現錯誤,可以直接在腳本中進行修改。
  • 如果要打包出新版本的 exe 安裝包文件,不需要再將上面流程走一遍,只需要將原先的 exe 可執行文件替換掉,再打開原先生成的腳本文件運行,即可生成新版本的 exe 安裝包文件。

 

最後就生成了 exe 安裝包文件,點擊打開exe文件即可進行安裝,如下圖所示。

 

參考:

Qt使用自帶的windeployqt 生成exe來發布軟件

QT 程序發佈以及用Inno Setup打包成安裝包

使用Inno Setup Compiler製作安裝軟件包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章