轉自:http://www.pin5i.com/showtopic-qt-vs2005-vs2008-mingw-static-compilation.html
編譯準備 下載NOKIA網站上的QT SDK,解壓或安裝到相關目錄。本文以QT 4.6.2為例,:http://get.qt.nokia.com/qt/source/qt-win-opensource-4.6.2-vs2008.exe或者直接下載源碼:http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.zip下載後安裝好的目錄結構為(假設安裝到D:\QT):├─share├─lib├─bin├─mingw└─qt ├─translations(QT語言檔案目錄) ├─tools(QT相關工具源碼目錄) ├─src(原始碼目錄) ├─qmake(qmake原始碼目錄) ├─plugins(圖形,資料庫等外掛程式目錄) ├─mkspecs(平台設定檔) ├─lib(庫檔案) ├─include(標頭檔) ├─examples(樣本程式) ├─doc(文檔) ├─demos(示範程式) ├─config.tests ├─bin(命令列工具) └─qtc-debugging-helperconfigure組態工具在qt目錄,以下假設QTDIR=D:\QT\SDK\qt,編譯前最好清空 lib,demos,examples,docs四個目錄,配置完成後在這幾個目錄下放一個空的Makefile檔案,避免make時報錯。
VS2005動態編譯 1.設定VS2005的環境變數2.設定目標平台set QMAKESPEC=win32-msvc20053.進入 QTDIR目錄回合組態,產生Makefile檔案configure -platform win32-msvc2005 -release -opensource -shared -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista4. 運行nmake /I /K(附帶/I /K 選項可以避免出現錯誤時編譯自動終止,用於跳過錯誤繼續編譯其它檔案)經過這樣編譯的Qt庫不依賴mingwm10.dll,libgcc_s_dw2-1.dll,但依賴Qt庫的Dll檔案和微軟的CRT執行階段程式庫,使用此Qt庫編譯Windows平台下的程式,發布時需帶上用到的Qt連結庫Dll檔案和微軟的CRT執行階段程式庫Dll檔案。
VS2005靜態編譯 (VS2008 編譯同理,啟動相應的命令列,設定相應的目標平台,修改相應的設定檔)1.設定VS2005的環境變數2.設定目標平台set QMAKESPEC=win32-msvc20053.修改mkspecs/win32-msvc2005目錄下的設定檔 qmake.conf將下面兩行:QMAKE_CFLAGS_RELEASE = -O2 -MDQMAKE_CFLAGS_DEBUG = -Zi -MDd修改為:QMAKE_CFLAGS_RELEASE = -O2 -MTQMAKE_CFLAGS_DEBUG = -Zi -MTd(D是指dynamic,T是指static,d是指debug)4.進入QTDIR目錄,回合組態,產生 Makefile檔案set QMAKESPEC=win32-msvc2005configure -platform win32-msvc2005 -release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista5.運行運行nmake /I /K經過這樣編譯的Qt庫不依賴於任何Dll檔案(如微軟的CRT執行階段程式庫),使用此Qt庫編譯Windows平台下的程式發布時不需要附帶任何額外的 Dll檔案。
MinGW靜態編譯 1.設定MinGW的環境變數2.設定目標平台set QMAKESPEC=win32-g++3.修改 mkspecs/win32-g++目錄下的設定檔qmake.conf將下面一行:QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc修改為:QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc然後將下面一行:QMAKE_LFLAGS_DLL = -shared修改為:QMAKE_LFLAGS_DLL = -static4.QTDIR目錄,回合組態,產生Makefile檔案set QMAKESPEC=win32-g++configure -platform win32-g++ -release -no-exceptions -opensource -static -fast -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista5.運行運行mingw32-make -i -k(-i -k選項的含義與上面nmake的相同)經過這樣編譯的Qt庫,不依賴任何Dll檔案(如mingwm10.dll,libgcc_s_dw2-1.dll),使用此Qt庫編譯的 Windows平台下的程式發布時不需要附帶任何額外的Dll檔案。
編譯事項說明 編譯完成後可以刪除bin目錄中所有不是當前編譯日期的檔案。建議編譯前移除examples和demos檔案夾的所有檔案,避免重編譯這兩個檔案夾,加快編譯速度。另外,編譯命令請根據自己的實際情況配置,上面我的配置是(以VS2005靜態編譯為例):-platform win32-msvc2005 目標平台-release 關閉調試資訊-no-exceptions 除去異常支援-opensource 開源版-static 建立靜態庫-fast 快速配置,只產生Qt庫檔案及子目錄的Makefile檔案,其它的Makefile檔案後面再使用qmake產生-qt-sql-sqlite SQLite驅動支援-plugin-sql-sqlite SQLite連結外掛程式支援-no-qt3support 不編譯Qt3相容庫-qt-zlib zlib庫-qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg 圖形格式外掛程式庫-no-webkit 不編譯webkit,此選項可極大加快編譯速度,需要使用WebKit的可以刪除此選項-qt-style-windowsxp -qt-style-windowsvista 支援XP和Vista主題樣式注意:使用靜態編譯的程式通常較大,建議發布前使用UPX壓縮,一般可以減少至少50%的大小。