一.編譯
方法如下圖所示。
1.點擊qt界面左下角的圖標;
2.選擇Release;
3.點擊編譯運行即可;
生成的程序運行正常之后,找到項目的生成目錄。比如,項目源碼路徑:
D:\OutPutResult\QtWorkPlace\DiyName
它的項目生成目錄是:
D:\OutPutResult\QtWorkPlace\build-DiyName-Desktop_Qt_5_8_0_MinGW_32bit-Release
我們可以發現,此時點擊.exe文件是會出問題的,解決辦法如下。
二.發布
使用windeployqt工具,進行打包發布
1.首先進入上圖中這個文件夾,在里面,找到 DiyName.exe,將這個.exe 復制到一個新的單獨的文件夾里用於發布,比如存到 :
D:\OutFaBu 文件夾里面。
此時,這個文件只一個有剛剛從release文件夾下,復制過來的.exe文件。
4.運行完成
此時,我們可以發現在剛剛創建的新文件夾D:\OutFaBu中生成許多文件和 dll文件、qm文件,這時候得到的就完整的 exe程序發布集合,依賴關系都解決好了。此時點擊DiyDame.exe文件就可完美的運行。
這時候就會看到 qt 已經把需要用到的 DLL 都復制過來了。我會在這個基礎上再根據需要去掉一些東東:
- libEGL.dll, libGLESV2.dll 這兩個文件是 ANGLE 的文件,可以去掉。opengl32sw.dll 是軟件模擬 OpenGL,除非用戶的系統連 DirectX 支持都不完整——虛擬機環境就是這樣——不然這個文件也完全沒有用。 QtWidgets/C++ 程序都不用 OpenGL,所以直接去掉即可。可在調用 windeployqt.exe 時加"--no-angle" 和 "--no-opengl-sw" 這兩個參數。
- 如果沒有使用 svg 的話,iconenginesqsvgicon.dll, imageformatsqsvg.dll, Qt5Svg.dll 這三個文件也可以刪掉
- 如果沒有國際化用戶的話,translations 里面的翻譯文件也可以刪掉。
- QML 程序沒有使用 QtWidgets/C++ 可以刪掉 Qt5Widgets.dll
- 如果 imageformats 目錄里面有幾種圖像格式沒用上,也可以刪掉。我自己通常把整個目錄都刪掉,Qt已經編譯了 png 的支持,能讀寫程序包含的圖標就夠,其它格式不重要。
- qmltooling 和 Qt5Network.dll 是用於 QML 調試用的,可以刪掉。
- 到第三部壓縮時,可以減小文件大小。
三.壓縮
Enigma virtual box是免費的軟件虛擬化工具,它可以將多個文件封裝到您的應用程序主文件,這樣您的軟件就可以制作成為單文件的綠色軟件。
enigma virtual box 支持所有類型的文件格式,包括動態鏈接庫 (.dll), activex/com (.dll, .ocx), 視頻/音頻文件 (.avi, .mp3), 文本文件 (.txt, .doc) 等。
上圖步驟2與3間可點擊文件選項按鈕,勾選壓縮選項,打包完成的可執行文件大小會小得多 。