記錄-如何建立MSVS的Qt編譯環境?

  • 18129
  • 0

記錄-如何建立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://doc.trolltech.com/4.4/install-wince.html

下面有一些開發者先前的中文資源:

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)

擷取2

接著輸入

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資料夾去看,如下:

3

點開digitalclock資料夾,發現有剛剛我們建置的檔案:digitalclock.exe

run起來就是這樣

擷取444 

在這邊,因為我們的模擬器有參考系統的環境參數,所以我們可以直接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方案,我們點選該專案右鍵再加入一個新增專案, 這時我們要選的是安裝與佈署的封裝專案

如下

擷取bbb

命名以後,你可以看到Cab封裝專案中,目前只有兩個空的資料夾,分別是程式檔案資料夾與應用程式資料夾

 

Step.3 你先可以先將剛剛那三個檔加到”程式檔案資料夾”然後再加入一個主要輸出!(如下圖)

擷取zzxxx

 

Step.4 接著為了讓程式可以在程式集那邊建立捷徑,所以你可在cab封裝方案空白處右鍵加入特殊資料夾,這時則選擇加入程式集資料夾

zzzzz

 

Step.5 項目屬性也要切換成Release,設定後就可以安裝囉,假如這邊沒設定的話,可能會因為權限的關係,手機那邊會裝不起來

擷取zzd

 

Step.6 因為模擬器是英文版,還有語言的問題,目前因為example程式是外國開發的,所以程式部分還好,不過方案是我剛剛建的

所以要check 一下方案的一個地方,就是Manufacturer的屬性,預設是中文的預設公司名稱,我們將他改成google都可以

adfadf

 

Step.7 接著重建rebuild封裝專案,假如一切正常,Cab封裝檔就在封裝專案的資料夾中的release目錄中

直接上傳到手機執行安裝吧!

結果會像這樣…對比一下剛剛run起來的win32版本,功能完全一樣呢!

IMG_0069

 

假如是windows 7的版本可以到下列網址下載Download Windows Mobile Device Center 6.1(12MB)來deploy

若有興趣,至少已經知道有一個方法可以跨平台開發強大手機程式了。你也來試試看吧!