關于Dirs文件,就是指定要編譯的路徑,這個地球人都知道。還是簡單介紹一下。按照文檔上面介紹有三種定義:DIRS,DIRS_CE和OPTIONAL_DIRS。
DIRS:就是指定要編譯的目錄。
DIRS_CE:只有目錄下的源代碼用于WinCE的映像文件時,才編譯該目錄。
OPTIONAL_DIRS:指定可以選擇編譯的目錄。比如:OPTIONAL_DIRS=proj1,如果想編譯proj1目錄,可以設置BUILD_OPTIONS=proj1,然后運行build命令就可以了。
舉個例子:
DIRS= common
drivers
oal
bootloader
表示需要編譯common,drivers,oal和bootloader目錄。
DIRS=*
表示編譯當前的所有目錄。
2. Sources文件
在WinCE BSP中會看到很多sources文件,一般會和源代碼放在同一個目錄,當然不是絕對的。這些sources文件里面就是定義了一些宏,主要用于告訴 Build.exe在編譯源代碼的時候應該如何編譯和鏈接,告訴Nmake.exe如何編譯源代碼以及最后生成什么類型的文件。
下面具體介紹一下:
TARGETNAME:最后編譯完后生成的目標文件的名字,不包括擴展名。
TARGETTYPE:生成的文件的類型。具體值如下:
LIBRARY,一個.lib文件
DYNLINK,一個.dll文件
PROGRAM,一個.exe文件
RELEASETYPE:該宏設置兩個環(huán)境變量RELEASEDIR和RELEASELIBDIR,就是設置編譯后生成文件存放的路徑。具體值如下:
PLATFORM,生成的文件在PLATFORM<BSP NAME><Target>
LOCAL,生成的文件在當前路徑下
CUSTOM,生成的文件在TARGETPATH指定的位置
MANAGED,生成的文件在%_PROJECTROOT%OAK<Target>Managed
OAK, SDK, DDK,生成的文件在%_PROJECTROOT%Oak<Target>
TARGETPATH:當上面的RELEASETYPE=CUSTOM的時候,該宏指定路徑
SOURCELIBS:靜態(tài)鏈接。函數的實體被鏈接過來,生成一份拷貝
TARGETLIBS:動態(tài)鏈接。函數的地址被鏈接過來,系統(tǒng)執(zhí)行時會加載該庫
INCLUDES:指定額外的要搜索的頭文件的路徑
SOURCES:指定要被編譯的文件
ADEFINES:指定匯編器要使用的參數
CDEFINES:指定編譯器要使用的參數
LDEFINES:指定連接器要使用的參數
RDEFINES:指定資源編譯器Rc.exe的參數
DLLENTRY:指定dll的入口函數
DEFFILE:指定該模塊的.def文件
EXEENTRY:指定可執(zhí)行文件的入口函數
SKIPBUILD:不做實際的build操作,直接返回成功
WINCECOD:編譯后生成一個.cod的匯編文件,用于查看匯編代碼調試
WINCECPU:用于說明為指定的CPU編譯,這樣被編譯出來的目標文件會被放在_TGTCPU環(huán)境變量所指定的子目錄下面,一般該宏在sources.cmn中定義。
WINCEMAP:編譯后生成一個.map文件,用于調試
WINCEOEM:設置該值表示需要使用WinCE下的一些公用的庫和頭文件,該值一般在BSP中的sources.cmn中定義。
WINCETARGETFILE0:用于告訴編譯系統(tǒng)在編譯當前路徑下的源碼文件之前,要先由Build.exe編譯的目標文件。
WINCETARGETFILES:用于告訴編譯系統(tǒng)在鏈接當前路徑下所有的目標文件之前,要先由Build.exe編譯的目標文件。
WINCE_OVERRIDE_CFLAGS:用于定義用戶自己的編譯器參數取代默認的編譯器參數。
舉個例子:
TARGETNAME=serial_smdk2410
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib
$(_SYSGENOAKROOT)lib$(_CPUINDPATH)ceddk.lib
SOURCELIBS=$(_SYSGENOAKROOT)lib$(_CPUINDPATH)serpddcm.lib
$(_SYSGENOAKROOT)lib$(_CPUINDPATH)com_mdd2.lib
DEFFILE=serial.def
DLLENTRY=_DllEntryCRTStartup
SOURCES= ser_smdk2410.cpp
pdds3c2410_ser.cpp
需要編譯的文件為ser_smdk2410.cpp和pdds3c2410_ser.cpp,DEF文件為serial.def,DLL的入口函數是 _DllEntryCRTStartup,靜態(tài)連接serpddcm.lib和com_mdd2.lib兩個庫,動態(tài)鏈接coredll.lib和 ceddk.lib兩個庫,最終編譯為dll文件,文件名為serial_smdk2410.dll。
最后總結一下,Dirs文件會和Sources文件配合使用,但是他們不可能存在同一個目錄下面。Dirs文件指定編譯目錄,Sources文件指定如何編譯。