Posted on 2007-06-19 09:27
chemz 閱讀(5560)
評論(4) 編輯 收藏 引用 所屬分類:
C++
Qt4.2.3編譯記錄
Qt已經(jīng)發(fā)布了最新架構(gòu)的版本Qt4了,目前的最新版本已經(jīng)到了Qt4.3,由于原來還使用
的是Qt3.3.4的版本,所以就Qt4種的2.3版進(jìn)行了編譯,準(zhǔn)備升級到Qt4。這個編譯過程一般
而言還算是比較的簡單,只是由于Visual Studio 2005在進(jìn)行了SP1后引入了一個編譯bug,
導(dǎo)致編譯Qt4時候會出現(xiàn)編譯時錯誤,同時一般而言在Qt4.2.3的編譯選項中包含了一些和
Visual Studio2005默認(rèn)不相同的選項(同時也是標(biāo)準(zhǔn)不太兼容的地方),所以現(xiàn)在將編譯
的具體過程進(jìn)行詳細(xì)的說明。
1. 設(shè)置環(huán)境變量
首先肯定是要解壓縮Qt4.2.3的源代碼包到某個目錄下(這里使用的是commercial版本),
如:D:\Qt\4.2.3\。然后在系統(tǒng)環(huán)境目錄下添加一個QTDIR=D:\Qt\4.2.3環(huán)境變量,并且
在系統(tǒng)的PATH追加%QTDIR%\bin目錄項,以使得可以找到編譯后的庫和應(yīng)用程序。
2. 應(yīng)用Patch
Qt4中有兩個地方需要進(jìn)行修改才能夠正常的編譯,一個是關(guān)于編譯選項的,另外一個是
關(guān)于源代碼的。
2.1. 修改編譯選項
進(jìn)入到%QTDIR%\mkspecs\win32-msvc2005\目錄下,打開qmake.conf文件找到19行的
QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-,刪除后面的-Zc:wchar_t-選項,
主要是為了保持標(biāo)準(zhǔn)兼容性以及和其他代碼的兼容性,否則會出現(xiàn)Qt4中采用了
wchar_t的函數(shù)不能夠接受沒有-Zc:wchar_t選項下的wchar_t類型;
2.2. 修改源代碼
進(jìn)入到%QTDIR%\src\corelib\tools\目錄下,打開qmap.h文件找到QMultiMap類的
定義,用如下的內(nèi)容替換replace和insert函數(shù):
typedef QMap<Key, T>::iterator QMap_iterator;
inline QMap_iterator replace(const Key &akey, const T &avalue){ return QMap<Key, T>::insert(akey, avalue); }
inline QMap_iterator insert(const Key &akey, const T &avalue){ return QMap<Key, T>::insertMulti(akey, avalue); }
并將下面的replace和insert函數(shù)的定義體給注釋掉;
同樣的打開qhash.h文件找到QMultiHash類的定義,用如下的內(nèi)容替換replace和
insert函數(shù):
typedef QHash<Key, T>::iterator QHash_iterator;
inline typename QHash_iterator replace(const Key &akey, const T &avalue){ return QHash<Key, T>::insert(akey, avalue); }
inline typename QHash_iterator insert(const Key &akey, const T &avalue){ return QHash<Key, T>::insertMulti(akey, avalue); }
并將下面的replace和insert函數(shù)的定義體給注釋掉。
之所以要這樣修改是因?yàn)閂isual Studio2005的SP1所引入的bug導(dǎo)致的。
3. 安裝協(xié)議文件
要安裝商業(yè)版本就必須具有安裝商業(yè)的license,將.qt-license文件拷貝到用戶的
%USERPROFILE%目錄下,如:C:\Documents and Settings\Administrator\。
4. 配置并編譯
打開console窗口,并設(shè)置VC的環(huán)境變量,然后運(yùn)行如下的配置命令:
configure -debug-and-release -no-stl -no-sql-sqlite -qt-libjpeg -qt-gif -platform win32-msvc2005
成功后就可以通過運(yùn)行nmake來完成源代碼的完全編譯了。
上面的命令行中,根據(jù)你的要求可以自行調(diào)整,一般而言為了成功編譯必須要包含的命令
選項是-debug-and-release和-platform win32-msvc2005兩個,其他可以選擇。