Windows下多個版本Qt的安裝配置
經常需要在同一臺機器中裝有多套Qt程序,比如,同時裝有
- 同一個版本的但不是同一編譯環境編譯的Qt,(mingw版 與 VS2008版等)
- 同一編譯環境但不同版本的Qt,(Qt4.5.2, Qt4.6.0 及 Qt4.7.0beta2等)
- 以上情況混合等
這麼多套Qt裝到同一機器中,如何自由切換呢。
方法一
- 在機器中建立 多個 用戶,每個用戶設置不同的 Qt 作爲其默認的開發環境。這樣比較簡單,想換環境,只需切換下用戶即可。但不太靈活,很多人不喜歡。
方式二
用 QtCreator,用這個東西很簡單了,只要在 工具|選項中 設置好各個版本的 Qt 即可。QtCreator 會自動處理各個版本的環境變量。但QtCreator 目前還不是太成熟,使用中總會偶爾有點小問題(比如 debug和release選擇上,編譯時找不到QMake等,不過這個東西進步很快,值得期待)
方式三
- 個人喜歡在用命令行中直接輸 qmake、make debug 一類的,感覺編譯時還是這麼舒服一點。
用命令行的話,最好是能隨時方便地打開各個命令行,在Windows右鍵菜單中加入打開命令行的菜單是個好主意。恩,就這麼辦吧
安裝多個Qt
- 下載 Qt4.6.0-vs2008 版,安裝到 D:QtQt4.6.0
- 下載 Qt4.7.0-beta2-mingw,安裝到 E:QtQt4.7.0-beta2
- ... (爲了自己不犯迷糊,VS2008編譯的,安裝到D盤;Mingw編譯的,安裝到E盤)
設置默認Qt
- 選擇一個自己最常用的版本,將其bin路徑添加到系統環境變量 path 內(這樣該版本編譯的程序就可以直接通過雙擊運行了)
比如,我們將 D:QtQt4.6.0in 添加到系統path內。
將各Qt的控制檯加入右鍵菜單
設置 Qt4.6.0-VS2008
打開註冊表,創建項:
[HKEY_CLASSES_ROOT*shellQt460-VS2008command]
設置其默認值
cmd.exe /k "d:Qt4.6.0inqtvars.bat vsvars"
設置 Qt4.7.0-Mingw
創建項:
[HKEY_CLASSES_ROOT*shellQt470beta2-Mingwcommand]
設置其默認值
cmd.exe /k "e:Qt4.7.0-beta2inqtvars.bat"
第三方庫
裝有多套 Qt 後,安裝第三方庫時這也是麻煩的問題。第三方庫分兩種
Qt的第三方庫
比如 QextSerialPort, Qwt等,這些庫一般都是和編譯器與Qt的版本都相關的。 對這種情況,需要用各個版本的Qt對其編譯一遍:然後 將將編譯後的.lib (.a)、.dll 以及頭文件 分別拷貝到相應的 Qt 的lib、bin、以及 include 目錄內。
與Qt無關的第三方庫
- 比如 OpenCV 等,和Qt無關,只和編譯器相關 對這種情況,用不同編譯器各編譯一次即可。 比如 OpenCV 編譯後,分別爲
D:OpenCV-2.1.0-VS2008 E:OpenCV-2.1.0-Mingw
- 這兒呢,我們可以將其lib、bin、include 分別拷貝到 Qt 的 lib、bin、include 目錄內。 但這樣呢,一是重複,比如,同時有 Qt4.5.0-VS2008和Qt4.6.0-VS2008,二是其他C++程序使用OpenCV時不太友好。
那麼我們怎麼處理這個問題呢?先看運行時需要的 bin :
兩套OpenCV,我們只能將其中一套加入到系統Path內
這個與我們前面的默認Qt一直就可以了,將
D:OpenCV-2.1.0-VS2008inDebug;D:OpenCV-2.1.0-VS2008inRelease
加入系統Path內
對於不在系統Path內的這套OpenCV,我們將其設置到 Qt 的配置文件內
在這兒,我們修改文件:
e:Qt4.7.0-beta2inqtvars.bat
將 E:OpenCV-2.1.0-Mingwin 加入其Path內
bin 的問題解決了,lib 和 include 的問題呢?
個人喜歡建立一個文件: opencv.pri
OPENCVPATH_MSVC = D:/OpenCV-2.1.0-vs2008 win32-msvc*{ INCLUDEPATH += $${OPENCVPATH_MSVC}/include CONFIG(debug, debug|release) { LIBS+=-L$${OPENCVPATH_MSVC}/lib/debug -lcxcore210d -lhighgui210d } else { LIBS += -L$${OPENCVPATH_MSVC}/lib/release -lcxcore210 -lhighgui210 } } OPENCVPATH_MINGW = E:/OpenCV-2.1.0-mingw win32-g++{ INCLUDEPATH += $${OPENCVPATH_MINGW}/include LIBS += -L$${OPENCVPATH_MINGW}/lib -lcxcore210 -lhighgui210 } unix:LIBS += -lcv -lhighgui
一個工程需要用到OpenCV時,只需要pro文件內include該文件就行了。
應該還有其他更好的辦法來處理這種問題,希望其他人指教