最近在研究用靜態(tài)編譯的 Qt 做個 Qt 的安裝包程序侣颂,因為 nsis 在界面自定義還有多語言適配等問題上不太理想每庆。做安裝包程序基本上只需要有最基礎(chǔ)的 Qt 界面模塊即可就轧,不過把除了 UI 的模塊全部去掉又比較難用...這里記錄下兩種極端編譯配置下生成的程序大小作為參考。
編譯環(huán)境搭建
編譯工具安裝
編譯需要的環(huán)境可以看官方文檔,windows-requirements 中的Building from Source
有說明需要安裝的工具,所有工具都記得要添加到環(huán)境變量枣抱。
- VS2019(其他版本僅作參考)熔吗,下載地址:Visual Studio 2019
- ActivePerl, 下載地址:Download And Install Perl: ActivePerl
- Python佳晶,下載地址:Python Releases for Windows
- Ruby(以前的官方文檔是有的桅狠,如果有問題可以裝下),下載地址:RubyInstaller for Windows
- Jom轿秧,多核編譯中跌,下載地址:jom releases
編譯準備
- 源碼下載并解壓,下載地址:qt-everywhere-src-5.12.5.zip
- 在源碼同級目錄創(chuàng)建個 qt-build 目錄來放生成的文件菇篡,也就是使用
shadow build
漩符,方便修改配置后進行多配置編譯。直接運行源碼目錄下的 configure.bat 會把生成文件生成到源碼目錄驱还,修改配置后編譯容易出錯嗜暴。
- 修改
qtbase\mkspecs\common\msvc-desktop.conf
文件,將 MD 改為 MT
- 打開 VS 的命令行工具并切換到第 2 步創(chuàng)建的 qt-build 目錄议蟆,后面就是輸入命令編譯了闷沥。
編譯步驟
.\..\src\configure.bat xxx # 根據(jù)指定配置生成makefile
nmake 或者 jom # 編譯
nmake install # 安裝到指定目錄
全模塊配置
編譯配置命令
最后的-mp 是多核編譯的參數(shù),多核編譯用 jom 快得一匹咐容,全模塊也只要 20 分鐘編譯完成舆逃。
.\..\src\configure.bat -static -release -platform win32-msvc -release -static -prefix "D:\Qt\Qt5.12.5-msvc2019-x86-static-release-full" -opensource -confirm-license -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp
Qt庫大小
Demo 程序大小
超精簡配置
這個配置把能刪的模塊都刪了,編譯出來后基本也就基礎(chǔ)UI相關(guān)類能用...所以編譯起來超快的戳粒。
編譯配置命令
.\..\src\configure.bat -static -release -platform win32-msvc -no-opengl -prefix "D:\Qt\Qt5.12.5-msvc2019-x86-static-release-mini" -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdeclarative -skip qtdoc -skip qtgamepad -skip qtcharts -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtspeech -skip qtsvg -skip qttools -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns -no-feature-texthtmlparser -no-feature-textodfwriter -no-feature-concurrent -no-feature-effects -no-feature-sharedmemory -no-feature-systemsemaphore -no-feature-im -no-feature-dom -no-feature-filesystemwatcher -no-feature-graphicsview -no-feature-graphicseffect -no-feature-sizegrip -no-feature-printpreviewwidget -no-feature-keysequenceedit -no-feature-colordialog -no-feature-fontdialog -no-feature-printpreviewdialog -no-feature-progressdialog -no-feature-errormessage -no-feature-wizard -no-feature-datawidgetmapper -no-feature-cups -no-feature-paint_debug -no-feature-codecs -no-feature-big_codecs -no-feature-iconv -no-feature-networkproxy -no-feature-socks5 -no-feature-networkdiskcache -no-feature-bearermanagement -no-feature-mimetype -no-feature-undocommand -no-feature-undostack -no-feature-undogroup -no-feature-undoview -no-feature-statemachine -no-feature-gestures -no-feature-dbus -no-feature-sessionmanager -no-feature-topleveldomain -no-feature-sha3-fast -no-feature-imageformat_ppm -no-feature-imageformat_xbm -no-feature-freetype -no-feature-appstore-compliant -no-feature-process -no-feature-lcdnumber -qt-zlib -qt-libpng -qt-libjpeg
Qt庫大小
Demo 程序大小
比全模塊配置生成的exe減少了 30%的大小路狮,不過 30%也就 3M,在 windows 平臺的話倒是沒必要追求這種極致了=-=
使用編譯后的靜態(tài)庫
- 新建一個 Qt Version蔚约,并添加編譯后的 qmake.exe 的路徑览祖。
此時如果是移動了編譯后的路徑,可能報錯Qt version is not properly installed,please run make install炊琉。在 qmake.exe 所在目錄新建一個 qt.conf 文件展蒂,并添加下面的內(nèi)容即可:
[paths]
Prefix = ..
- 新建一個構(gòu)建套件,選好編譯器和上一步新建的 Qt version 即可: