QT庫在Windows上的編譯


1、從http://www.qtcentre.org/下載QT源代碼,注意是源代碼。我下載到的是QT4.5.1版,文件名為qt-win-opensource-src-4.5.1.zip;
2、解壓,注意不要解壓路徑不要含有空格或中文,我把它解壓到了d:\qt451里,准備一個存放編譯后“成品”的文件夾,我准備放在d:\qt451\static里;
3、把QT源碼里的“mkspecs” 文件夾復制到准備存放“成品”的地方,比如我的就是把d:\qt451\qt-win-opensource-src-4.5.1\mkspecs復 制到d:\qt451\static里;
4、用記事本或其它編輯器打開D:\qt451\static\mkspecs\win32-msvc2005\qmake.conf(注 意VC版本號),按需要修改:
1) 如果不希望編譯出來的DLL或EXE鏈接到VC運行時庫,就把-MD改成-MT,把-MDd改成-MTd(查找替換)。
2) [可選]如 果做了上一步,那么就不需要嵌入manifest了,去掉CONFIG+= 后面的embed_manifest_dll embed_manifest_exe。
3) VC默認是“將wchar_t 視為內置類型”的,所以建議去掉-Zc:wchar_t-, 否則以后用到一些與wchar_t有關的函數(如fromWCharArray)時,就要在項目屬性里設置“將wchar_t視為內置類型”為No了)。
4) 進入“Visual Studio 2005 命令提示”,其它版本的VC也一樣。
5) 進入解壓的地方,比如我的: cd d:\qt451\qt-win-opensource-src-4.5.1。(小提示,在控制台里輸入前幾個字符再按tab 鍵,可以自動填充路徑、文件名,MS在向Linux Shell學習?)
6) 鍵入命令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
7) 輸入configure -help可以顯示所有選項的幫助信息,上面是我用的選項,解釋一下:
   -prefix 路徑名 編譯后的安裝路徑
   -debug-and-release 編譯Debug和Release版本
   -static 編譯靜態庫,如果不指定,默認為編譯成DLL
   -opensource 使用LGPL協議,如果不指定也行,configure運行后會問的
   -no-qt3support 不用編譯與QT3兼容的一些廢棄函數,如果你比較熟悉QT3,還是去掉它吧
   -no-dbus 不用鏈接到DBus庫,這個庫偶好像在Linux里看到過,Windows里不用。
   -no-phonon 同上,不要鏈接
   -no-webkit 是否編譯Web相關的一些QT子庫,加上這個可以省不少編譯時間,就看你是否准備用這些庫了。
   -qt-gif 使用QT自帶的gif庫
   -qt-zlib 使用QT自帶的zlib庫
   -qt-libpng 使用QT自帶的libpng庫
   -qt-libmng 使用QT自帶的libmng庫
   -qt-libtiff 使用QT自帶的libtiff庫
   -qt-libjpeg 使用QT自帶的libjpeg庫
   configure可能要花幾分鍾時間,成功后再輸入nmake開 始編譯,編譯會花去大概1小時(和配置有關啦,我是以我的老爺機為參考的)。
8) 輸入nmake install
   如果沒出錯的話,“QT成品”就已經在我們之前建立的成品路徑里了(我的是d:\qt451\static)
 
VC只需要成品路徑里的東東就夠了,如果你想,可以刪除解壓的那些源代碼省點空間。
測試是否成功:打開VC -> 新建項目 -> 設置項目屬性 -> 配置屬性->C/C++->常規->附加包含目錄:D:\qt451\ static\include -> 配置屬性->C/C++->代碼生成->運行時庫:多線程調試(/MTd),這條依據你當時修改qmake.conf的情況決定 -> 配置屬性->鏈接器->常規->附加庫目錄:d:\qt451\static\ lib -> 配置屬性->鏈接器->輸入->附加依賴項: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();
}
 
注:如果編譯的是動態庫,那么要把QT成品里的bin目錄加入path系統變量,或者把這里用到的DLL復制到與你的程序相同的目錄里,一般是 QtCore4.dll和QtGui4.dll(Debug版為QtCored4.dll和QtGuid4.dll),依你使用的子庫而定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM