zz Platform Builder編譯過程
經過前兩次的邊做邊學,我們已經創建並可以自由修改自己的平台了,這次我平來補充一點理論知識,以便加深對CE生成過程的瞭解。在此之前,需要説明的是CE的目錄結構是很龐大而複雜的,在以後的工作中很多事情會取決於你對目錄結構的瞭解程度,在此,CE5的文件夾結構未發生大的改變,因此想了解此部分內容的朋友可直接參閲本人的《WinCE實驗教程》相關部分。與CE4稍有不同的是在CE5中你自己的平台不在存放於Public文件夾中了,而是專門有一個PBWorkspaces的文件夾,這樣更加方便管理且結構清晰了。
我們重點要説的還是CE的生成過程,即你在編譯平台的時候Platform Builder到底為你做了些什麼?
實際上,IDE在生成CE的過程當中共經歷了四個階段,分別是Sysgen、Build、Copy、Make,即組件生成階段,編譯階段,Release文件夾複製階段和鏡像打包階段。下面我們就分階段來説明一下。
在Public文件夾下是CE為我們提供的可用組件,我們定製自己的平台是通過Platform Builder做的選擇就是從這裏面選擇了一部分需要的組件。在這些文件夾中,包含了所有可用的庫文件,頭文件,DEF文件,當然也包括了所有可導出的函數説明。在Sysgen階段要做的就是從中選擇我們自己的平台需要的頭文件,庫文件和導出函數以創建我們自己平台需要的組件。它所完成的頭文件會以C++註釋的方式加以標記,這樣它就可以選擇需要的部分來導出,最後把所有需要的庫進行鏈接就得到了我們自己平台所需要的東西了,它就放在Wince500\pbworkspaces\%ProjectName%\WINCE500\%CPU_TYPE%_x86\cesysgen文件夾下。
經過上一階段後,需要的頭文件庫文件就準備好了,但這只是系統組件部分,我們的平台還有各種設備驅動程序等其他的東西,這些就要在Build階段來完成了。
整個Build階段都是在圍繞着DIRS文件和SOURCES文件來進行,前者決定了哪些文件夾要被編譯,後者決定了哪些文件要被如何編譯,也就是説,此階段要完成的就是各種源程序的編譯過程。下面我們就重點看一下這兩種文件的內容。
DIRS文件可以在很多文件夾中找到,它列出了要參與編譯的子文件夾,內容大體如下:
DIRS_CE=\
ceddk \
regenum \
pcibus \
這樣,build.exe在編譯的時候就可以通過它來逐層找到要參與編譯文件夾了。至於其中的OPTIONAL_DIRS、DIRS_NTANSI等項目的含義可以通過幫助查到。
同樣,SOURCES文件對參與編譯的源程序的編譯方式做了規定,例如通過TARGETNAME規定編譯後的名稱,通過TARGETTYPE規定編譯的類型是EXE,DLL還是LIB,通過DLLENTRY規定DLL文件的入口點,通過INCLUDES規定編譯過程中需要的頭文件,通過SOURCES規定參與編譯的源文件等等。這些宏的用法在幫助文檔裏有更加明細的説明,在這裏只要理解這種編譯機制就可以了。
接下來,所有的編譯都有完成了,DLL也好,EXE也好,都是目標平台自有的了,下一步就是一個Copy過程,也就是將你的項目文件夾下的WINCE500文件夾下的內容複製到RELEASE文件夾下,這步就沒什麼可説的了。
最後一步就是打包了,即將已經準備好的目標平台的文件打包成NK.bin這樣的操作系統鏡像文件。在這個過程當中,一個完成了文件合併、註冊表壓縮、資源文件替換和打包四個子過程。
文件合併階段重點對以下文件進行合併:
--所有的.bib文件合併成CE.BIB
--所有的.reg文件合併成REGINIT.INI
--所有的.dat文件合併成INITOBJ.DAT
--所有的.db文件合併成INITDB.INI
知道這幾個合併以後便於你在RELEASE下查找你做的修改是否確實被置入了目標平台。
註冊表壓縮會將REGINIT.INT文件壓縮成DEFAULT.FDF文件。
資源替換就是將EXE或DLL中的資源替換成本地語言如簡體中文。
接下來才是把這些CE.BIB等二進制文件製作NK.BIN文件,這才是我們需要的文件,不過在CE5中好像可以在項目設置中改變這個文件的名稱,讀者可以自己試試。
以上説的這些編譯過程,在Platform Builder中的Build OS菜單下分得比較明確,這一點比CE4要好得多,你可以自己掌握讓它單獨執行某一步驟。如果你修改了某個組件的源程序,也可以右擊這一組件然後單獨編譯此組件,最後再生成Image,總之,靈活性是比較不錯的了。
同時,經過以上的分析也可以看出來,Platform Builder這個IDE在幫助生成CE時基本上是依賴於文件夾結構和那些文本文件以及批處理文件的,因此,對於文件夾結構還是要儘量的熟悉。同時也證明那些總説批處理文件沒用的人的無知,在微軟的操作系統和開發工具中,批處理文件是至關重要的,説它無用的人只是由於自己的水平不夠而已。
好了,這次我們學得多做得少,不過這些知識還是有必要了解的,別忘了對照你的文件夾結構來學習哦!