原文地址::http://space.itpub.net/16912323/viewspace-504721
先來解釋一下:一般我們要編譯WinCE都是先建立工程,然後再IDE的開發環境中進行編譯。對於WinCE5.0來說,是用Platform.
Builder5.0;對於WinCE6.0來說,就是用VS2005,因為PB6.0已經整合到VS2005裡面了。這樣有個問題,就是每次都要人來手動編譯。讓我來舉個例子,這是我在做項目中遇到的。公司基於ARM的平台開發BSP,而且已經release了,但是公司有很多產品都基於這個平台,每個平台根據功能不同對WinCE進行了不同程度的裁剪,所以每個產品對應一個工程。這樣問題就出現了,如果要進行測試,我們就需要有人手動的把每一個工程都編譯出來,然後才能進行測試,這樣會很耽誤時間。如果是用自動化編譯,只需要通過指令碼命令把要編譯的工程輸入,然後運行,到了第二天早上,所有產品的image就都編譯出來了,這樣會很節省時間。
現在就開始介紹如何?,有個前提是你已經建立了一個WinCE工程並且在裡面為這個工程建立了SDK,當然如果你不需要匯出SDK的話,你就不需要建立SDK了。WinCE5.0和WinCE6.0的命令有些小的區別,我會分開介紹:
對於WinCE5.0:
1. pbxmlutils.exe
在“\Windows CE Platform. Builder\5.00\CEPB\BIN”下面可以找到,這個命令可以從PB的文檔中查到。主要作用是通過解析你的工程檔案<OS Design Name>.pbxml來獲得與該工程相關的環境變數,併產生一個指令碼來設定這些環境變數。格式如下:
pbxmlutils /getbuildenv /workspace "%_WINCEROOT%\PBWorkspaces\<OS design name>\<OS design name>.pbxml" /config "<BSP>: <Target device>" > SetEnv.bat
看著可能有點暈,我來舉個例子:
pbxmlutils /getbuildenv /workspace "%_WINCEROOT%\PBWorkspaces\MyWorkspace\MyWorkspace.pbxml" /config "CEPC: x86_Release" > SetEnv.bat
其實就兩個參數,第一個參數很多人都知道如何設定,第二個參數config可能有些人不太瞭解,你可以開啟你的工程,然後查環境變數PBCONFIG的值,用這個值就可以了。
2. Blddemo.exe
這個應該比較熟悉。編譯WinCE的時候,實際上就是調用Blddemo -q,不多說了。
3. buildsdk.exe
這個是用來編譯SDK的。格式如下;
buildsdk [MyOSDesign.pbxml]
很簡單,不過還是給個例子:
buildsdk "%_WINCEROOT%\PBWorkspaces\MyWorkspace\MyWorkspace.pbxml"
對於WinCE6.0:
1. pbxmlutils.exe
在“\Microsoft Platform. Builder\6.00\cepb\IdeVS”下面可以找到,這個命令可以從PB的文檔中查到。主要作用是通過解析你的工程檔案<OS Design Name>.pbxml來獲得與該工程相關的環境變數,併產生一個指令碼來設定這些環境變數。格式如下:
pbxmlutils /getbuildenv /workspace "%_WINCEROOT%\OSDesigns\<OS design name>\<OS design name>\<OS design name>.pbxml" /config "<BSP> <Target device>" > SetEnv.bat
來舉個例子:
pbxmlutils /getbuildenv /workspace "C:\WINCE600\OSDesigns\MyWorkspace\MyWorkspace\MyWorkspace.pbxml" /config "CEPC x86 Release" > SetEnv.bat
和WinCE5.0有些小的區別,要注意一下。同樣如果不知道第二個參數config如何設定,可以開啟工程,查環境變數PBCONFIG的值,用這個值就可以。
2. Blddemo.exe
這個和WinCE5.0用法一樣。編譯WinCE的時候,實際上就是調用Blddemo -q。
3. buildsdk.exe
這個是用來編譯SDK的。格式如下;
buildsdk [MyOSDesign.pbxml] [MySdkConfig.sdkcfg]
很簡單,不過還是給個例子:
buildsdk "\OSDesigns\MyWorkspace\MyWorkspace\MyWorkspace.pbxml" "\OSDesigns\MyWorkspace\MyWorkspace\SDKs\SDK1\SDK1.sdkcfg"
基本上,自動化編譯所需的主要命令都已經介紹完了,下面介紹如何使用上面的命令實現:
對於WinCE5.0:
@echo off
@set _WINCEROOT=c:\wince500
@set _PBROOT="c:\Program Files\Windows CE Platform. Builder\5.00"
@set PATH=%PATH%;c:\Program Files\Windows CE Platform. Builder\5.00\cepb\bin
cd /D %_WINCEROOT%
if exist build.log del build.log
if exist build.wrn del build.wrn
if exist build.err del build.err
pbxmlutils /getbuildenv /workspace "%_WINCEROOT%\PBWorkspaces\MyDesign\MyDesign.pbxml" /config "Samsung SMDK2410: ARMV4I_Release" > buildenv.bat
call buildenv.bat
call %_TARGETPLATROOT%\%_TGTPLAT%.bat
call Blddemo -q
buildsdk "%_WINCEROOT%\PBWorkspaces\MyDesign\MyDesign.pbxml"
對於WinCE6.0:
@echo off
@set _WINCEROOT=d:\wince600
@set _PBROOT=C:\Program Files\Microsoft Platform. Builder\6.00
@set PATH=%_PBROOT%\cepb\idevs;%PATH%
cd /D %_WINCEROOT%
if exist build.log del build.log
if exist build.wrn del build.wrn
if exist build.err del build.err
pbxmlutils /getbuildenv /workspace "%_WINCEROOT%\OSDesigns\MyDesign\MyDesign\MyDesign.pbxml" /config "CEPC x86 Release" > buildenv.bat
call buildenv.bat
call %_TARGETPLATROOT%\%_TGTPLAT%.bat
call Blddemo -q
call buildsdk "%_WINCEROOT%\OSDesigns\MyDesign\MyDesign\MyDesign.pbxml" "%_WINCEROOT%\OSDesigns\MyDesign\MyDesign\SDKs\SDK1\SDK1.sdkcfg"
上面針對WinCE5.0和WinCE6.0的兩個命令略有不同,但是原理是一樣的。只要有點Windows指令碼命令的知識,瞭解WinCE的整個編譯過程,看懂上面的代碼應該沒問題,這裡就不作介紹了。
上面給出的只是例子,上面的代碼,可以實現command line編譯WinCE並且還可以匯出SDK。如果想實現對多個工程進行編譯,只需要對上面的指令碼作些修改就可以了。上面的指令碼完全可以改寫成函數的形式,通過傳遞工程檔案名稱和平台的config來編譯WinCE,這樣就可以對多個工程順序進行編譯,這裡就不介紹了。