Qt入門之基礎篇(三):掌握Qt4的靜態編譯基本方法

轉載載請註明出處:CN_Simo.html

導語:  

        前兩章都提到過「靜態編譯」(Static Compilation),在Windows下一次靜態編譯差很少須要長達三個小時才能完成,並且還很是容易因爲各類緣由而出錯。那麼爲何要花這時間去幹這件事情呢!我當初只是想用Qt作一個exe賀卡發給同窗,可是一般狀況下,咱們作出的exe須要各類dll動態連接文件才能正常運行(壓縮打包給別人?直接發送一個exe文件都懶得打開,更況且還須要解壓呢),那麼我就想能不能只須要一個exe就能夠呢?
      「靜態編譯」的做用正是讓exe脫離dll的束縛,可是同時你的exe可能比以前要大好幾倍(沒辦法,萬物都無絕對完美)。前言說到這裏,咱們就進入正文來:bash

文章思路:

  1. 準備編譯所需環境及文件;
  2. 編譯Qt4.8.6源碼;(此過程或許要花掉你一上午的時間,要有良好的心理素質哦!
  3. 配置Qt靜態庫到Qt Creator;
  4. 靜態模式從新編譯Hello World程序;
  5. 找到exe程序與以前版本進行大小對比;
  6. 總結說明。

 


 

Let‘s start:

編譯準備:

所需環境:

配置固然是越好越快了,個人配置編譯了一上午。工具

所需文件:

前期工做:

 

步驟一:配置編譯文件qmake.conf

我將zip解壓到E盤,qmake.conf文件就在源碼目錄\mkspecs\win32-g++中,用記事本打開修改下列參數:QMAKE_LFLAGSQMAKE_LFLAGS_DLL。參數值爲 -static,以下圖:
static_1
修改完以後,我在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

 

  • set命令設置環境變量(注意:窗口關閉將清空設置,需從新設置
  • configure命令配置編譯內容,參數說明:

參數說明
回車後,看到如下信息表明完成:
orm

開始編譯:

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:

 打開qt creator,【工具】-【選項】-【構建和運行】,在裏面添加剛編譯出的qt4.8.6靜態版本(qmake路徑選擇bin目錄中的qmake.exe哦),以後添加新的構建套件,qt版本選擇qt4.8.6,名稱隨意,以下圖:

Hello World測試:

 【新建】一個project,構建套件選擇剛剛添加的。在這裏,我續用教程二中的helloworld項目測試一下。
打開helloworld項目後,crlt+5將新的構建套件添加上去,點擊左下角【部署構建套件】按鈕分別選擇原有Kit和靜態版Kit的release版本運行項目,幾秒鐘後便可看到helloworld運行界面:

exe文件對比:

尋找exe生成目錄,找到兩個exe文件,驚奇的發現了這個結果:

(右面是由咱們的qt靜態庫編譯生成的程序,左面則是原來的)

結果顯示:

  • 一樣是release版本的,所產生的helloworld程序大小徹底不在一個等級(一個KB級別,一個MB級別),靜態編譯敗
  • 動態編譯出的exe文件想要打開須要dll動態連接文件的支持,靜態連接編譯出的exe文件則能夠直接打開,再也不須要dll文件的束縛,靜態編譯勝

 


 

總結說明:

  經過上面結果能夠看出:動態編譯和靜態編譯都有各自優缺點,咱們應該適當選擇本身所需;
qt源碼編譯的過層拖得越長越是容易出錯誤,選擇一臺配置好點的電腦能夠適當增長編譯速度;
經過本章知識,咱們的心裏或許會嫌麻煩又或許會以爲頗有趣,若是你是後者但願之後的學習你可以愈來愈出色。
讓咱們一塊兒期待下期內容吧[@CN_Simo]!

結束語:      

上一篇:Qt入門之基礎篇(二):Qt項目創建、編譯、運行和發佈過程解析

相關文章
相關標籤/搜索