記錄-如何建立MSVS的Qt編譯環境?
Qt是Nokia最近強推的開發工具
可以開發Symbian的程式(當然不只是這樣),Qt也是標榜開源碼的程式語言,更可以跨平台的開發(Windows、Linux、WinCE..etc)
因為會編譯成Naive Code但又不像是java要跑一個JVM,這整個在佈署上應該就便利許多!
然而Qt不只是手機程式,他還可開發視窗程式(或者說,他本來就是一直在視窗程式開發都有在著磨),像Google Earth就是Qt的產品之一
Qt的語言是C++,跨平台這幾個字現在非常地吸引人了,因為手機現在至少已經三國鼎立!各自有各自的一片天(Apple iPhone、Google Android、Nokia Symbian)
若是多種不能相容的平台的話,就導致要各種版本都要開發一次。
關於Qt的架構(以及為什麼可以跨平台的開發)可以上qt.nokia.com,或是看gipi哥下面這一篇:
http://www.dotblogs.com.tw/jimmyyu/archive/2010/01/06/nokia-qt-framework.aspx
這一篇是記錄自己如何建立MSVS的Qt編譯環境
那為什麼要這麼做?
因為我準備試著用Qt使用的語言來開發Windows Mobile的程式(第一個跨平台的嘗試)
這也就是說,你可以在Qt開發程式,開發完以後透過VS轉成Visual C++的專案再編譯成WinCE的手機程式
至少官網說”可以”
Installing Qt on Windows CE
下面有一些開發者先前的中文資源:
http://october388.blogspot.com/2008/11/qt-for-vs2008-on-winxp.html
http://bafu.pixnet.net/blog/post/22907019
寫的最詳細的極品:http://www.cnblogs.com/ttylikl/archive/2009/07/19/1526696.html
Qt也很貼心的提供一些不同IDE開發環境的工具
Qt for Visual Studio下載此檔:Visual Studio Add-in
Qt for Eclipse(java)下載此檔:Qt Jambi 4.5.2_01 for Windows
不過最重要的就是要下載Qt 的Source啦,裡面包含了Qt的函式庫原始碼(c++)
下載:qt-win-opensource-4.6.0(VS) 開發win視窗程式
下載:qt-embedded-wince-opensource-src-4.5.3 開發WinCE手機程式
除此之外,你要開發WINCE就要先確保
已有安裝MS Mobile 5、6的 SDK,可以直接裝6了,當中又分Standard與Professional版本(可安裝Professional版本就好)
大至Qt For Win CE的流程是這樣的:
我們載入了Qt for wince的source,接著透過vs開發環境編譯與建立成VS可以支援的環境與函式庫(可讓vs開發時直接套用)
Step1:先將剛剛下載的Qt for WinCE的原始碼,解壓縮放在C:\Qt-embedded-wince\4.5.3(自己高興,要版本管理就分版本放資料夾)
開啟"Visual Studio 2008 Command Prompt" (注意,不是Qt Command Prompt)
cd C:\Qt-embedded-wince\4.5.3
Step2:設定Qt
編譯for CE原始碼(輸入下列指令),打入configure -h可以查到所有的參數說明:依自己的需求編譯檔案即可
configure -platform win32-msvc2008 -xplatform wincewm60professional-msvc2008 -webkit -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-openssl -no-dbus -phonon -plugin-sql-sqlite
ps:中間失敗的話,後來假如configure又失敗的話(關於函式庫的錯誤)
則可能要把vs 2008、Mobile SDK 6都移掉
Step 3:新增系統環境變數
將原始碼的bin "C:\Qt-embedded-wince\4.5.3\bin"加到Path變數(在電腦進階設定那邊)
接下來等待Configuration,Config成功後,依以下步驟設定環境變數。
1. set INCLUDE=C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\include;C:\Program Files\Windows Mobile 6 SDK\PocketPC\Include\Armv4i
2. set LIB=C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\lib\armv4i;C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i
3. set PATH=C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\bin\x86_arm;%PATH%
4. cd bin
5. 執行C:\Program Files\Microsoft Visual Studio 9.0\VC內的 vcvarsall.bat
6. setcepaths wincewm60professional-msvc2008
設定成功,且有裝SDK的話會顯示
Environment Selection:Windows Mobile 6 Professional SDK (ARMV4I)
Windows Mobile 6 Professional selected, environment is set up
Step 4
回到原碼的根目錄:cd ..
打下 “nmake”(這段編超久的,睡了午覺醒來,還是沒編好="=)
Step5 編好了以後,接著拿一些Qt的example來試試吧!
我們選擇widget的digiclock,這個程式在windows 7下執行會是這樣(run C:\Qt\4.6.0\bin下的qtdemo.exe)
接著輸入
1. cd examples\widget\digiclock
2. nmake –clean
3.qmake -config release
4 nmake
會在release資料夾中看到digiclock.exe(事實上你也會看到這個pro的專案已編成了VC++的專案(打開來看看)
其實之前nmake根目錄的時候,就有編過一次了,假如你沒有變動的話,應該是不會重編,因此修改日期是剛剛nmake的時間
因此我們之前nmake等那麼久也就是因為也把所有的example都編過一次了!
而之後,假如在Qt開發的Pro檔,也可以透過以下指令將他編譯成VC++ 專案
指定输出文件:qmake –tp vc –o ***.vcproj
既然已經build好,那就放到Device上驗證看看。
先開啟一個VC++的空白方案叫作MyTest,再加入剛剛的digiclock專案檔(vc++的喲,不是pro檔)
接著點選專案右鍵選擇佈署,他會幫你再重建一次:
2>------ 已開始部署: 專案: digitalclock, 組態: Debug Windows Mobile 6 Professional SDK (ARMV4I) ------
2>c:\Qt-embedded-wince\4.5.3\examples\widgets\digitalclock\debug\digitalclock.exe
========== 建置: 1 成功、0 失敗、0 最新、0 略過 ==========
========== 部署: 1 成功、0 失敗、0 略過 ==========
模擬器就會run起來了!
因為沒有建置安裝程序,所以不會在程式的menu選的到,那你可以用file explorer到My Device/Programe files資料夾去看,如下:
點開digitalclock資料夾,發現有剛剛我們建置的檔案:digitalclock.exe
run起來就是這樣
在這邊,因為我們的模擬器有參考系統的環境參數,所以我們可以直接run程式
但是實機上呢?他又沒有像我們之前有編譯與設定Qt函式庫的環境與參數。
參考以下:
假如要自行包成cab檔案安裝的話呢?那要先看看哪些dll要跟著exe包在一起做潵尿牛丸?
你可以使用:
Step.1 Dependency Walker 2.2來看看會需要哪些dll檔!
Dependency Walker(http://www.dependencywalker.com/)
執行畫面如下:
可以見得我們少了COREDLL.DLL、MSVCR90.DLL、IESHIMS.DLL這三個檔
這表示需要加上QtGui4.dll, QtCore4.dll以及msvcr90.dll,在Qt開發環境下的話,其實在build的時候,就會加入QtGui4.dll, QtCore4.dll了
只是現在我們將他轉換成為VC++的wince專案,因此還多了msvcr90(在C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\dll\armv4)中
因此我們在包成丸子之前,就要先找到這三個檔出來給exe檔使用!(在C:\Qt-embedded-wince\4.5.3\lib中)
這三個檔就要8.75MB,真的很大!程式還沒寫,就知道等下的程式至少是8.75MBup的程式了
Step.2 接著是透過剛剛建置的MyTest方案,我們點選該專案右鍵再加入一個新增專案, 這時我們要選的是安裝與佈署的封裝專案
如下
命名以後,你可以看到Cab封裝專案中,目前只有兩個空的資料夾,分別是程式檔案資料夾與應用程式資料夾
Step.3 你先可以先將剛剛那三個檔加到”程式檔案資料夾”然後再加入一個主要輸出!(如下圖)
Step.4 接著為了讓程式可以在程式集那邊建立捷徑,所以你可在cab封裝方案空白處右鍵加入特殊資料夾,這時則選擇加入程式集資料夾
Step.5 項目屬性也要切換成Release,設定後就可以安裝囉,假如這邊沒設定的話,可能會因為權限的關係,手機那邊會裝不起來
Step.6 因為模擬器是英文版,還有語言的問題,目前因為example程式是外國開發的,所以程式部分還好,不過方案是我剛剛建的
所以要check 一下方案的一個地方,就是Manufacturer的屬性,預設是中文的預設公司名稱,我們將他改成google都可以
Step.7 接著重建rebuild封裝專案,假如一切正常,Cab封裝檔就在封裝專案的資料夾中的release目錄中
直接上傳到手機執行安裝吧!
結果會像這樣…對比一下剛剛run起來的win32版本,功能完全一樣呢!
假如是windows 7的版本可以到下列網址下載Download Windows Mobile Device Center 6.1(12MB)來deploy
若有興趣,至少已經知道有一個方法可以跨平台開發強大手機程式了。你也來試試看吧!