Qt5.12.5 靜態(tài)編譯以及裁剪大小對比

最近在研究用靜態(tài)編譯的 Qt 做個 Qt 的安裝包程序侣颂,因為 nsis 在界面自定義還有多語言適配等問題上不太理想每庆。做安裝包程序基本上只需要有最基礎(chǔ)的 Qt 界面模塊即可就轧,不過把除了 UI 的模塊全部去掉又比較難用...這里記錄下兩種極端編譯配置下生成的程序大小作為參考。

編譯環(huán)境搭建

編譯工具安裝

編譯需要的環(huán)境可以看官方文檔,windows-requirements 中的Building from Source有說明需要安裝的工具,所有工具都記得要添加到環(huán)境變量枣抱。

Qt5-12-5-static-build-2020-07-11-22-37-34
  1. VS2019(其他版本僅作參考)熔吗,下載地址:Visual Studio 2019
  2. ActivePerl, 下載地址:Download And Install Perl: ActivePerl
  3. Python佳晶,下載地址:Python Releases for Windows
  4. Ruby(以前的官方文檔是有的桅狠,如果有問題可以裝下),下載地址:RubyInstaller for Windows
  5. Jom轿秧,多核編譯中跌,下載地址:jom releases

編譯準備

  1. 源碼下載并解壓,下載地址:qt-everywhere-src-5.12.5.zip
  2. 在源碼同級目錄創(chuàng)建個 qt-build 目錄來放生成的文件菇篡,也就是使用shadow build漩符,方便修改配置后進行多配置編譯。直接運行源碼目錄下的 configure.bat 會把生成文件生成到源碼目錄驱还,修改配置后編譯容易出錯嗜暴。
Qt5-12-5-static-build-2020-07-11-22-47-19
  1. 修改qtbase\mkspecs\common\msvc-desktop.conf文件,將 MD 改為 MT
Qt5-12-5-static-build-2020-07-12-00-27-17
  1. 打開 VS 的命令行工具并切換到第 2 步創(chuàng)建的 qt-build 目錄议蟆,后面就是輸入命令編譯了闷沥。
Qt5-12-5-static-build-2020-07-12-00-29-11

編譯步驟

.\..\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庫大小

Qt5-12-5-static-build-2020-07-12-10-15-19

Demo 程序大小

Qt5-12-5-static-build-2020-07-12-00-02-46

超精簡配置

這個配置把能刪的模塊都刪了,編譯出來后基本也就基礎(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庫大小

Qt5-12-5-static-build-2020-07-12-10-16-54

Demo 程序大小

Qt5-12-5-static-build-2020-07-12-00-05-11

比全模塊配置生成的exe減少了 30%的大小路狮,不過 30%也就 3M,在 windows 平臺的話倒是沒必要追求這種極致了=-=

使用編譯后的靜態(tài)庫

  1. 新建一個 Qt Version蔚约,并添加編譯后的 qmake.exe 的路徑览祖。
Qt5-12-5-static-build-2020-07-12-00-12-39

此時如果是移動了編譯后的路徑,可能報錯Qt version is not properly installed,please run make install炊琉。在 qmake.exe 所在目錄新建一個 qt.conf 文件展蒂,并添加下面的內(nèi)容即可:

[paths]
Prefix = ..
  1. 新建一個構(gòu)建套件,選好編譯器和上一步新建的 Qt version 即可:
Qt5-12-5-static-build-2020-07-12-00-24-17

參考鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锰悼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子团赏,更是在濱河造成了極大的恐慌箕般,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔清,死亡現(xiàn)場離奇詭異丝里,居然都是意外死亡曲初,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門杯聚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臼婆,“玉大人,你說我怎么就攤上這事幌绍“涔樱” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵傀广,是天一觀的道長颁独。 經(jīng)常有香客問我,道長伪冰,這世上最難降的妖魔是什么誓酒? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮贮聂,結(jié)果婚禮上丰捷,老公的妹妹穿的比我還像新娘。我一直安慰自己寂汇,他們只是感情好病往,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骄瓣,像睡著了一般停巷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榕栏,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天畔勤,我揣著相機與錄音,去河邊找鬼扒磁。 笑死庆揪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妨托。 我是一名探鬼主播缸榛,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兰伤!你這毒婦竟也來了内颗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤敦腔,失蹤者是張志新(化名)和其女友劉穎均澳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡找前,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年糟袁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躺盛。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡项戴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颗品,到底是詐尸還是另有隱情肯尺,我是刑警寧澤沃缘,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布躯枢,位于F島的核電站,受9級特大地震影響槐臀,放射性物質(zhì)發(fā)生泄漏锄蹂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一水慨、第九天 我趴在偏房一處隱蔽的房頂上張望得糜。 院中可真熱鬧,春花似錦晰洒、人聲如沸朝抖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽治宣。三九已至,卻和暖如春砌滞,著一層夾襖步出監(jiān)牢的瞬間侮邀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工贝润, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绊茧,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓打掘,卻偏偏與公主長得像华畏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子尊蚁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345