轉載載請註明出處:CN_Simo.html
前兩章都提到過「靜態編譯」(Static Compilation),在Windows下一次靜態編譯差很少須要長達三個小時才能完成,並且還很是容易因爲各類緣由而出錯。那麼爲何要花這時間去幹這件事情呢!我當初只是想用Qt作一個exe賀卡發給同窗,可是一般狀況下,咱們作出的exe須要各類dll動態連接文件才能正常運行(壓縮打包給別人?直接發送一個exe文件都懶得打開,更況且還須要解壓呢),那麼我就想能不能只須要一個exe就能夠呢?
「靜態編譯」的做用正是讓exe脫離dll的束縛,可是同時你的exe可能比以前要大好幾倍(沒辦法,萬物都無絕對完美)。前言說到這裏,咱們就進入正文來:bash
配置固然是越好越快了,個人配置編譯了一上午。工具
我將zip解壓到E盤,qmake.conf文件就在源碼目錄\mkspecs\win32-g++中,用記事本打開修改下列參數:QMAKE_LFLAGS和QMAKE_LFLAGS_DLL。參數值爲 -static,以下圖:
修改完以後,我在E盤新建一個「qt4.8.6_static」文件夾做爲編譯輸出目錄,而且須要將更改後的「mkspecs」文件夾複製到qt4.8.6_static文件夾中。若不作此操做步驟三可能會報錯,相似下面這樣學習
Could not find mkspecs for your QMAKESPEC(win32-g++) after trying: E:/qt/qt4.8.6_static\mkspecs
開始菜單中打開Qt命令窗口,cd命令進入源碼目錄:測試
e:&cd e:\qt-everywhere-opensource-src-4.8.6
下面全部操做都在本目錄中進行。 spa
輸入如下兩條命令:debug
set QMAKESPEC=win32-g++ configure -confirm-license -opensource -prefix 「F:\Qt\Qt_4.8.6_static」 -debug-and-release -static -platform win32-g++ -nomake demos -nomake examples -nomake tests -fast -mp
mingw32-make
輸入命令開始編譯,此過程最易出錯,由於持續時間長,中間可能遇到不少本身解決不了的問題,此時只能是從新開始。若是過程當中未出錯的話可能須要3個小時以上才能結束(個人電腦配置見上),你能夠去作別的事情了,在編譯過程當中最好不要用電腦去作其餘佔用大量系統資源的事情,由於這麼作將會大大增長失敗的概率。htm
結束以後,輸入下面命令開始一大堆的複製命令,這時你能夠看到qt4.8.6_static目錄已經開始急劇膨脹了。blog
mingw32-make install
大概15分鐘便可複製完畢。
要注意,若是移動或者改名qt4.8.6_static目錄,將致使bin目錄中的程序異常,下面操做可解決此問題:
在bin目錄下建立一個qt.conf文件,內容這麼寫:
[paths] Prefix = ..
如此,即可進行移動或改名操做了。
打開qt creator,【工具】-【選項】-【構建和運行】,在裏面添加剛編譯出的qt4.8.6靜態版本(qmake路徑選擇bin目錄中的qmake.exe哦),以後添加新的構建套件,qt版本選擇qt4.8.6,名稱隨意,以下圖:
【新建】一個project,構建套件選擇剛剛添加的。在這裏,我續用教程二中的helloworld項目測試一下。
打開helloworld項目後,crlt+5將新的構建套件添加上去,點擊左下角【部署構建套件】按鈕分別選擇原有Kit和靜態版Kit的release版本運行項目,幾秒鐘後便可看到helloworld運行界面:
尋找exe生成目錄,找到兩個exe文件,驚奇的發現了這個結果:
(右面是由咱們的qt靜態庫編譯生成的程序,左面則是原來的)
結果顯示:
- 一樣是release版本的,所產生的helloworld程序大小徹底不在一個等級(一個KB級別,一個MB級別),靜態編譯敗;
- 動態編譯出的exe文件想要打開須要dll動態連接文件的支持,靜態連接編譯出的exe文件則能夠直接打開,再也不須要dll文件的束縛,靜態編譯勝;
經過上面結果能夠看出:動態編譯和靜態編譯都有各自優缺點,咱們應該適當選擇本身所需;
qt源碼編譯的過層拖得越長越是容易出錯誤,選擇一臺配置好點的電腦能夠適當增長編譯速度;
經過本章知識,咱們的心裏或許會嫌麻煩又或許會以爲頗有趣,若是你是後者但願之後的學習你可以愈來愈出色。
讓咱們一塊兒期待下期內容吧[@CN_Simo]!