http://www.qtcn.org/bbs/simple/index.php?t7844.html
QT的編譯安裝(以4.2.3 for windows為例)
前言:本人連續10多次編譯QT庫失敗,現總結經驗,以飼後來者。
QT編譯主要有兩步:configure配置QT,make產生平台相關的QT庫,下面分別說明。
第一步:configure
configure這一步很關鍵。主要目的有兩個,一是根據環境變數QTDIR,QMAKESPEC和PATH來產生平台相關的qmake.exe;二是,顧名思義,配置QT環境了,比如源檔案放在哪裡,庫在哪裡,是否支援OpenGL等等。想瞭解如何配置可以在QTDIR中打上"configure --help"(UNIX風格)
產生QMAKE一般問題不大,只要有支援的編譯器再設好環境變數就行了。到QTDIR的readme裡找出適合自己的編譯器,然後指定給QMAKESPEC;QTDIR的真實路徑中不要包含空格,如"C:\Program Files\QT"就不行;path就不用說了。
此處經常出錯的地方就是rcc.exe和uic.exe。如果你從別的地方把它們拷了過來,一時搪塞過這一關,那麼很可能造成下一步make時會再次遇到該問題,正確的做法先運行一次configure,以產生qmake,然後切換到src目錄,qmake,(n)make.至於為什麼要這麼做,看QT4.2.2 for vs2005 就是了,它在安裝過程中就沒有編譯(否則不會很快就安裝完),裝完後bin目錄下已有很多exe,dll之類的檔案了。
至於編譯器,最好用“現代版”的,這樣對C++標準的支援要好些,難道還有人在用VC6這樣的殘缺古董?我用的是VS2005+SP1,沒有把VS2005裝在系統硬碟裡的朋友要注意了,如果你的還原時只還原系統硬碟,很可能造成QT無法編譯安裝!本人為此折騰了兩三天,也為的是備份/還原系統方便,把程式都裝在了D盤,用了大半年都沒問題,這次給撞上了:不是configure的時候出錯,就是nmake時出錯。錯誤提示資訊為“...\uic.exe
不是內部或外部程式,也不是可啟動並執行程式”、“U1077, cl.exe異常退出,0x2”之類。前前後後把QT編譯了N次總是有這樣那樣的錯誤,最後想起來上次成功是在沒有還原系統的情況下編譯的,可能是系統硬碟中某些VS資訊與程式盤中的對不上號,所以重裝VS2005+SP1,然後就一切順利,而且在公司機器和自己的筆記本上都這樣。所以,還是把VS2005裝到系統硬碟為好。另外一個問題就是SP1的一個BUG:你在configure的時候它會報錯,說位置在qmap.h,qhash.h這兩個檔案中,等MS發布這個BUG的補丁太漫長了,所以只能改這兩個檔案的代碼以避開此BUG,方法:把QMap和QHash模板中的replace()和insert()成員函數均改為在類內實現,把外部實現(在檔案末尾處)注釋掉即可。看起來VS2005這麼麻煩,我在VC6下做了個實驗,一切順利,看來古老有古老的好處。
第二步:make
這一步是根據configure時由qmake產生的makefile來編譯QT庫。只要前面配置好,一般就不會出什麼問題。如果有rcc.exe和uic.exe之類的錯誤,建議重新make一下src目錄。
注意事項:
在編譯QT前應準備2G的磁碟剩餘空間,其實編譯完後QT目錄佔1.6xGB,剩下的是給“磁碟空間不足”的警告來用的。另外QT庫的編譯時間很漫長(3個小時左右,IBM ThinkPad T30標配機器)。這裡給個參考,以便朋友們編譯時間心裡有個數。我是這樣的,configure和nmake的時候均把螢幕輸出重新導向到文字檔裡,configure會有五六百行的輸出,大小三四十KB,耗時六七分鐘;nmake會有近七千行的輸出,大小2MB左右,耗時約三小時。這樣的話看看檔案大小或開啟輸出檔案看行號,就知道現在大約進行到哪裡了。附件裡是我的configure和nmake輸出檔案,注意License資訊不可用,發這篇文章時我給改了。