解析 QT 4.5.1編譯
QT 4.5.1編譯從 http://www.qtcentre.org/ 下載QT源代碼,注意是源代碼。我下載到的是QT4.5.1版,文件名為qt-win-opensource-src-4.5.1.zip。
解壓,注意不要解壓路徑不要含有空格或中文,我把它解壓到了d:\qt451里
準(zhǔn)備一個(gè)存放編譯后“成品”的文件夾,我準(zhǔn)備放在d:\qt451\static里
把QT源碼里的“mkspecs” 文件夾復(fù)制到準(zhǔn)備存放“成品”的地方,比如我的就是把d:\qt451\qt-win-opensource-src-4.5.1\mkspecs復(fù)制到d:\qt451\static里
用記事本或其它編輯器打開(kāi)D:\qt451\static\mkspecs\win32-msvc2005\qmake.conf(注 意VC版本號(hào)),按需要修改:
如果不希望編譯出來(lái)的DLL或EXE鏈接到VC運(yùn)行時(shí)庫(kù),就把-MD改成-MT,把-MDd改成-MTd(查找替換)。
如 果做了上一步,那么就不需要嵌入manifest了,去掉CONFIG+= 后面的embed_manifest_dll embed_manifest_exe。
VC默認(rèn)是“將wchar_t 視為內(nèi)置類(lèi)型”的,所以建議去掉-Zc:wchar_t-, 否則以后用到一些與wchar_t有關(guān)的函數(shù)(如fromWCharArray)時(shí),就要在項(xiàng)目屬性里設(shè)置“將wchar_t視為內(nèi)置類(lèi)型”為No了)。
進(jìn)入“Visual Studio 2005 命令提示”,其它版本的VC也一樣。
進(jìn)入解壓的地方,比如我的: cd d:\qt451\qt-win-opensource-src-4.5.1。(小提示,在控制臺(tái)里輸入前幾個(gè)字符再按tab 鍵,可以自動(dòng)填充路徑、文件名,MS在向Linux Shell學(xué)習(xí)?)
鍵入命令
- configure -prefix d:\qt451\static -debug-and-release -static
- -opensource -no-qt3support -no-dbus -no-phonon -no-webkit
- -qt-gif -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg
輸入configure -help可以顯示所有選項(xiàng)的幫助信息,上面是我用的選項(xiàng),解釋一下:
-prefix 路徑名 編譯后的安裝路徑
-debug-and-release 編譯Debug和Release版本
-static 編譯靜態(tài)庫(kù),如果不指定,默認(rèn)為編譯成DLL
-opensource 使用LGPL協(xié)議,如果不指定也行,configure運(yùn)行后會(huì)問(wèn)的
-no-qt3support 不用編譯與QT3兼容的一些廢棄函數(shù),如果你比較熟悉QT3,還是去掉它吧
-no-dbus 不用鏈接到DBus庫(kù),這個(gè)庫(kù)偶好像在Linux里看到過(guò),Windows里不用。
-no-phonon 同上,不要鏈接
-no-webkit 是否編譯Web相關(guān)的一些QT子庫(kù),加上這個(gè)可以省不少編譯時(shí)間,就看你是否準(zhǔn)備用這些庫(kù)了。
-qt-gif 使用QT自帶的gif庫(kù)
-qt-zlib 使用QT自帶的zlib庫(kù)
-qt-libpng 使用QT自帶的libpng庫(kù)
-qt-libmng 使用QT自帶的libmng庫(kù)
-qt-libtiff 使用QT自帶的libtiff庫(kù)
-qt-libjpeg 使用QT自帶的libjpeg庫(kù)
configure可能要花幾分鐘時(shí)間,成功后再輸入nmake開(kāi) 始編譯,編譯會(huì)花去大概1小時(shí)(和配置有關(guān)啦,我是以我的老爺機(jī)為參考的)。
輸入nmake install
如果沒(méi)出錯(cuò)的話(huà),“QT成品”就已經(jīng)在我們之前建立的成品路徑里了(我的是d:\qt451\static)
VC只需要成品路徑里的東東就夠了,如果你想,可以刪除解壓的那些源代碼省點(diǎn)空間。
測(cè)試是否成功
1、打開(kāi)VC
2、新建項(xiàng)目
3、設(shè)置項(xiàng)目屬性
4、配置屬性->C/C++->常規(guī)->附加包含目錄:D:\qt451\ static\include
5、配置屬性->C/C++->代碼生成->運(yùn)行時(shí)庫(kù):多線(xiàn)程調(diào)試(/MTd),這 條依據(jù)你當(dāng)時(shí)修改qmake.conf的情況決定
6、配置屬性->鏈接器->常規(guī)->附加庫(kù)目錄:d:\qt451\static\ lib
7、配置屬性->鏈接器->輸入->附加依賴(lài)項(xiàng):qtmaind.lib QtCored4.lib QtGuid4.lib,如果要編譯Release,把后面的d去掉。
代碼:
- #include <Qt/QtGui>
- int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
- QApplication app(__argc, __argv);
- QLabel *label = new QLabel("Hello Qt!");
- label->show();
- return app.exec();
- }
注:如果編譯的是動(dòng)態(tài)庫(kù),那么要把QT成品里的bin目錄加入path系統(tǒng)變量,或者把這里用到的DLL復(fù)制到與你的程序相同的目錄里,一般是 QtCore4.dll和QtGui4.dll(Debug版為QtCored4.dll和QtGuid4.dll),依你使用的子庫(kù)而定。
【編輯推薦】
解析 QT 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)
深度解析嵌入式QT開(kāi)發(fā)環(huán)境搭建