windows mobile 編譯鏡像總是讓人難以忍受的耗時,當然我們不能每次修改一點東西就build All一次。
下面是自己工作中積累的【不同情況下使用的編譯命令】來加速產生鏡像的過程,不排除有錯的可能,歡迎指正。
對於修改,一般可以分為以下幾種類型:
(1)修改public下的東西(一般不會修改這裡的東西)
(2)修改了Cesysgen.bat或是會影響到Cesysgen.bat的環境變數,如以SYSGEN或BSP為首碼的變數。
(3)修改platform/%myPlatform%下的東西
其中(3)又可以分為:
(4)只修改reg、bib檔案
(5)只修改了%myPlatform%下的源碼
一、 blddemo命令
關於blddemo,msdn裡有詳細介紹,但講得很不清楚。
如果沒記錯的話,這是一個批處理(bat)檔案,會執行一些列命令,可以根據不同情況使用不同參數,
下面主要是對其加以總結,到底什麼時候用什麼參數,這正是msdn沒有講清楚卻是最重要的部分。
blddemo最常用的有三個參數:clean -q -qbsp
(1)clean:如果修改了跟sysgen相關的,也就是說上面的第(2)種情況,那就要加上clean。
(2)-q:如果沒有修改public下的東西,則可加上-q,因為public下的東西一般是不會修改的,微軟不推薦修改這裡的東西,所以一般都會用到-q。
(3)-qbsp:我理解是quick BSP,也就是說只要是只修改了%myPlatform%下的東西,這一個參數便肯定能將修改編入鏡像,不管是源碼還是reg、bib或者其他。
-qbsp 似乎已包含了-q 功能,沒見過二者同時用的情況,也就是說只改動%myPlatform%下的肯定就沒改動public下的,所以-qbsp一般單獨使用。
對於blddemo命令最常用參數組合整理如下:
若public沒改變
(a)blddemo clean -q :sysgen 改變(build all 就是使用了這個命令)
(b)blddemo -q :sysgen沒變
(c)blddemo -qbsp:只改變了%myplatform%下的東西
這裡從上到下耗時依次減少。
若public改變,則使用blddemo 或blddemo clean ,這兩項很少用到,理論上用法,沒驗證過。
二、makeimg 命令
以上雖然blddemo -qbsp耗時最少,但耗時還是很長。我平時用的最多的是makeimg命令,這個命令就是產生鏡像的意思,也是會執行一系列操作,屬於最後一個步驟,所以耗時幾乎是最短的了。但有個前提,它的所有操作都是針對release目錄下的內容。
makeimg會執行reg、bib等的合併作業,但都是對release目錄下的,比如platform.reg common.reg project.reg 三個合并成一個reginit.ini,明白了這一點就好辦了。
對於上面所說的第(4)種情況,也就是只改動reg或bib檔案,最快速的方法是:
直接修改release目錄下的platform.reg、platform.bib,把需要的檔案拷貝到release目錄下,然後makeimg即可。
如果確定生效了,再到%myplatform%下修改,以防不小心執行了其他動作把release下的修改的東西給覆蓋了。
三、最後貼一個公司裡其他人用的一個bat檔案,用時最少,我看不懂,這裡不解釋。
適用情況好像是修改%myplatform%下的源碼檔案,特別是修改了PLATFORM/COMMON/SRC/SOC/的情況。
懂的人請不吝賜教。
(裡面的參數需要根據自己的平台設定一下)
call cls
set WMxxx=I:/wm604
set MyPlatform=DracoBSP
set Version=Retail
setlocal
pushd
I:
cd %WMxxx%/BuildScripts/WPC_%MyPlatform%_%Version%/
call baseOSEnv.bat
cd %WMxxx%/PLATFORM/COMMON/SRC/SOC/
call build
cd %WMxxx%/platform/%MyPlatform%
call build
REM %_FLATRELEASEDIR%/%_TGTPLAT%.cfg.xml
REM %_FLATRELEASEDIR%/%_TGTPLAT%.sku.xml
call packagegenerator packages.pkd.xml.merged
call dskimage %MyPlatform%.cfg.xml %MyPlatform%.sku.xml
cd %WMxxx%/PLATFORM/%MyPlatform%/FILES
call postdiskimage
popd
endlocal
pause