日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WINCE源代码配置文件

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE源代码配置文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

********************************LoongEmbedded********************************

作者:LoongEmbedded(kandi)

時間:2011.9.9

類別:WINCE 系統開發

********************************LoongEmbedded********************************

WINCE的編譯工具Build.exe通過WINCE源代碼配置文件提供的下面的信息來編譯指定的目錄及子目錄的源代碼(source code):

1)??? 要貫穿的目錄。

2)??? 要編譯的C和微軟的的Visual C++文件。

3)??? 創建的二進制文件。

?

WINCE源代碼配置文件是指下面類型的文件

1)??? Dirs File

指dirs文件,用于識別包含源代碼的子目錄,也就是要編譯的源代碼所在的目錄。

2)??? Make File

指文件夾下面的makefile文件,包含要編譯和鏈接源代碼所需要的變量。

3)??? Module-Definition File

比如是power按鍵驅動文件下下面的PowerButton.DEF文件,包含在一個可執行或者dll文件中定義的共用符號、函數和變量的聲明。

4)??? Sources File

包含編譯源代碼所需要的宏變量。

?

編譯工具貫穿一個目錄樹,先查找dirs文件,然后是sources文件。其中dirs文件指定要包含的源代碼或是另外的包含sources文件的子目錄。當編譯工具在當前的目錄定位到一個sources文件,它就調用Nmake tool(Nmake.exe)來編譯指定的C或C++源代碼文件,并且根據包含在makefile文件的鏈接規則來鏈接目標模塊。

圖1

下面就來分別學習這四種源代碼配置文件:

1. dirs文件

dirs文件是一個text文件,它指定了包含要編譯的源代碼的目錄,如SMDK6410 \SRC下的dirs內容:

DIRS =??? \

??? common??????? \

??? oal??????????? \

??? kitl??????????? \

??? drivers??????? \

bootloader

這表示SMDK6410 \SRC目錄下的dirs文件要編譯common、oal、kitl、drivers和bootloader目錄下或者是這些目錄下的子目錄的源代碼文件。

?

Dirs文件內容中使用DIRS、DIRS_CE和OPTIONAL_DIRS關鍵字來如何編譯指定的目錄

1)??? DIRS

如上面所示,DIRS用于指定要編譯的目錄,其中DIRS=*表示要編譯當面所有的目錄,另外上面的例子也可以改為下面的方式來指定要編譯的目錄

DIRS=common oal kitl dirvers bootloader

也就是用空格鍵把要編譯的目錄隔開,但這樣不直觀,不提倡采用這樣的方式。

?

2)??? DIRS_CE

只有DIRS_CE指定的目錄下的源代碼被寫進WINCE運行時鏡像的時候才編譯該目錄下的源代碼,如camera驅動下的dirs文件內容如下:

DIRS=\

CAMERA_PDD\

OV9650_MODULE\

S3C6410_camera\

DLL

3)??? OPTIONAL_DIRS

指定可以選擇編譯的目錄,比如OPTIONAL_DIRS=projectA,如果要編譯projectA目錄,可以設置BUILD_OPTIONS= projectA,然后運行build命令就可以了。

?

2. makefile文件

源代碼樹的每個子目錄(subdirectory)下面有一個sources文件和一個makefile文件,如下圖:

圖2

在應用開發環境中(an application development enviroment),比如VS2005中,一個makefile文件包含所有的命令、宏定義、和用于指定如何編譯的可選項,但是,相比之下,PB(Platforom Builder)中的makefile文件只包含有對一個共用的makefile的引用,如下:

圖3

而圖上中提到的環境變量_MAKEENVROOT在\PUBLIC\COMMON\OAK\MISC中的wince.bat中定義,見下圖:

圖4

圖4中環境變量_WINCEROOT,再結合圖1我們可知_WINCEROOT=F:\WINCE600,這樣就可以確定完整的路徑了,同時就可以推斷出這個被WINCE各部分共享的編譯文件也就在F:\WINCE600\PUBLIC\COMMON\OAK\MISC下,文件名為makefile.def。

?

在Build.exe定位dirs和sources文件后,它設置一個內部環境變量,然后Nmake.exe使用此環境變量來附加(append) sources.cmn文件到適當的子目錄下的sources文件中。接下來,Nmake.exe使用makefiel.def文件來把當前的一系列環境變量轉換成對編譯器、鏈接器或其他工具的調用,這樣就可以編譯sources文件中指定的源代碼或者是鏈接需要指定的目標模塊(object modules)。

?

3.? xxx.def文件

xxx.def文件是一個模塊定義文件,它包含一個可執行或者dll文件中定義的共用符號、函數和變量的聲明,這些聲明是可執行文件(一般是dll文件)向外導出的接口,比如PowerButton驅動的PowerButton.def文件,內容如下:

LIBRARY??? PWR

?

EXPORTS

??? PWR_Init

??? PWR_Deinit

??? PWR_Open

??? PWR_Close

??? PWR_Read

??? PWR_Write

??? PWR_Seek

??? PWR_IOControl

??? PWR_PowerUp

PWR_PowerDown

雖然所有的可執行文件都能使用xx.def文件,但它主要用于鏈接器來定義dll的導出函數,xx.def文件的包含有下面的內容,,簡要描述常用的部分:

1)??? NAME

2)??? LIBRARY

此聲明告訴鏈接器創建一個DLL和此聲明部分必須先于其他聲明的部分,同時,鏈接器創建一個入口庫(an import library),除非在編譯的時候采用export文件(.export),在此不知道是哪里決定是否生成.export文件的,我試過,就算是把我的PowerButton.def文件的內容清空,在對PowerButton驅動編譯的時候,也會在PLATFORM\SMDK6410\lib\ARMV4I\retail目錄下生成smdk6410_PwrBtn.exp和smdk6410_PwrBtn.lib文件,這兩個文件我似乎沒有在哪里指定要生成啊????????????????

3)??? STACKSIZE

4)??? SECTIONS

5)??? EXPORT

此聲明使一個或多個定義被有效導出給其他應用,主要是用于導出dll文件中的函數接口,這樣系統或者應用可以通過把此dll裝載到自己的內存空間后就可以使用這些導出的接口函數了。

6)??? VERSION

?

4.? sources文件

sources文件設置目錄中源代碼的宏定義,這樣Build.exe就可以用這些宏定義來決定如何編譯和鏈接源代碼。在Build.exe解析(parsers)一個sources文件之后,Nmake.exe把sources文件并入共用的makefile文件Makefile.def中,Build.exe只遵照宏的指派和忽略其他指示。下面就來學習一下sources文件中的知識點。

?

1)???? SYNCHRONIZE_DRAIN

Help文檔中的說明如下:

When you perform a build on a development workstation that has multiple processors, this creates the possibility that different Build Tool (Build.exe) threads might be running on different processors.

In this case, you must ensure that your build process is ordered so that Build.exe does not attempt to build a product without first building its dependencies.

If this macro definition is set to 1 in a directory's sources file, Build.exe builds that directory last.

A directory containing a sources file that uses this macro is not built until all other directories are built. For example, this macro definition allows you to ensure that all preceding library (.lib) files are built before building the current directory, which depends on the previous libraries.

Use this macro, and the related SYNCHRONIZE_BLOCK macro, very sparingly. When encountered, these macros completely stall the build process until synchronization is complete.

If a directory uses this macro, list the directory last in its parent dirs file

?

上面的重點就是如果在sources文件中設置了SYNCHRONIZE_DRAIN=1,那么Build.exe會最后才構建此文件,也就是說先編譯dirs文件中其他的sources文件中沒有設置了SYNCHRONIZE_DRAIN=1的文件,最后再編譯sources文件中定義了此宏的文件,這樣就可以解決了庫依賴的問題,在這樣的情況下,我們就要確保WINCE操作系統的構建過程是有順序的,以便于Build.exe不會嘗試去構建一個它的依賴文件都還沒有構建的文件,否則就會產生找不到庫的錯誤。還要注意的一點就是,如果那個目錄文件中的sources文件設置了SYNCHRONIZE_DRAIN=1,我們還要應該把此目錄文件放在dirs文件的dirs表示行的最后面,這樣也說明了dirs中只是的文件也是有順序的。

?

2)???? TARGETNAME

編譯生成的目標文件的文件名,不包括擴展名,比如:

TARGETNAME = s3c6410_touch

表示觸摸屏驅動生成的目標文件名為s3c6410_touch。

?

3)???? TARGETTYPE

生成的目標文件的類型,可以是下面三種類型

LIBRARY:目標文件是一個靜態鏈接庫文件(.lib)。

DYNLINK:目標文件是一個動態鏈接庫文件(.dll)。

PROGRAM:目標文件是一個可執行文件(.exe)。

?

4)???? RELEASETYPE

此宏定義設置為另個標示(flag):RELEASEDIR和RELEASELIBDIR,用于指定編譯的時候生成的二進制文件和庫文件存放的目錄,下圖是RELEASETYPE的取值說明

圖5

?

5)???? DLLENTRY

如果TARGETYPE=DYNLINK,那么宏DLLENTRY的定義是用于指定此dll文件的入口函數,如果沒有為DLLENTRY賦值,就默認此dll的入口函數為_DllMainCRTStartup,下面就來介紹DLLENTRY可能的取值:

?

⑴_DllMainCRTStartup

此函數是一個dll首先的C運行時(Runtime)入口點,此函數在C運行時中定義。當dll文件被映射到進程的地址空間的時候,操作系統調用此函數來初始化C運行時和調用全局變量的初始化,接下來會調用DllMain函數;在卸載dll的時候,操作系統會調用_DllMainCRTStartup函數來deinitialize C運行時和釋放初始化時的內存占用。

?

因為_DllMainCRTStartup會調用DllMain函數,所以我們的dll要定義DllMain函數,但不需要導出DllMain函數,其函數原型如下:

BOOL DllMain(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved);

?

⑵DllMain

Dll直接的入口函數,如果你的應用中使用C運行時,在我們的dll被進程attach的時候,那么此函數負責執行C運行時任何的初始化,并且在dll被進程detach的時候,負責deinitialize C運行時和釋放初始化時的內存占用。

?

如果DLLENTRY=DllMain,那么我們的dll中就一定要定義此函數,和上面的原型一樣,當然,也可以不需要導出此函數,操作系統自己可以調用到這個函數。

?

⑶_DllEntryCRTStartup

dll基本(basic)的C運行時入口函數,此函數也是在C運行時中定義的,其作用和_DllMainCRTStartup函數類似,但是它會調用DllEntry函數,而不是DllMain函數,所以如果DLLENTRY=_DllEntryCRTStartup,那么就必須定義但不一定需要導出的DllEntry函數,此函數原型如下:

BOOL DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved);

?

?

WINCE系統中C運行時庫(CRT)提供很多有用的函數來使編程更加容易,CRT存在于(reside in)coredll.dll和corelibc.lib中,我們可以通過鏈接coredll.lib來鏈接在coredll.dll中CRT的一部分。corelibc.lib包含CRT的啟動函數,初始之外,我們必須要鏈接它包含的其他CRT函數來首先確保最適宜的性能。

?

6)???? DEFFILE

指定此模塊的.def文件,我們知道模塊是通過.def文件來導出此模塊的接口的。

?

7)???? PRECOMPILED_INCLUDE

指定預編譯頭文件的名字,如果設置了此項,在編譯的過程中將enable指定的頭文件來參與編譯。

?

8)???? TARGETLIBS

指定要鏈接到目標可執行文件(.exe或.dll)中的的其他(additional)庫文件和對象文件(.obj)。此宏代表性地只用于在我們的模塊需要鏈接輸出庫(export library)時,比如coredll.lib,ceddk.lib等,這些庫文件就是輸出庫,它們導出一些共用的函數給應用程序或者是模塊,這樣就可以使用這些共用的函數了。

?

9)???? SOURCELIBS

指定要鏈接到我們的模塊中的庫文件,代表性地只用于鏈接靜態庫(static library),靜態庫是一個包含對象、函數和數據的文件。根據我的觀察,SOURCELIBS中指定要鏈接的庫一般是針對某個驅動用的而不是整個系統可以共用的庫,而TARGETLIBS指定的要鏈接的庫是一些共用的庫。

?

10) SOURCES

指定要編譯的源代碼文件。

11) SKIPBUILD

如果SKIPBUILD=1,則跳過而不會編譯此目錄。

12) PREPROCESSDEFFILE

如果設置為1,必須預先處理包含了路徑指示的.def文件,觸摸屏驅動中PDD

層的sources文件就設置了這一項。

?

13) INCLUDES

指定額外的要搜索的頭文件,只有在要包含的頭文件是私有的(private)的情況下才使用此宏,因為標準的共用的頭文件被自動包含進來。

?

14) WINCEOEM

設置該值,表示需要使用系統下一些共用的輸入庫(import library)和頭文件,此宏一般是系統級的部分來設置,比如是BSP包中的一些驅動。

?

15) WINCEMAP

用于指定在編譯過程中生成相應的.map文件,默認的情況下此宏設置為1,此.map文件對于debug很有幫助。

?

Sources文件中還有一些其他的宏變量,詳細請參考MSDN中的help文檔。

?

?

?

總結

以上是生活随笔為你收集整理的WINCE源代码配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费看成人啪啪 | 最好看的中文字幕国语电影mv | 国产综合精品视频 | 青青草91视频| 国产成年网站 | 久久这里精品 | 免费人成视频在线 | 免费精品在线 | 九一网站在线观看 | 日本不卡在线 | 国产精品无码一区二区三区三 | 国产福利精品一区 | 欧美日韩在线视频一区二区三区 | 日韩一区二区免费看 | www.av网| 538国产视频 | 日韩一级片在线 | 午夜青青草 | 久爱视频在线 | 小优视频污 | 成人片黄网站色大片免费毛片 | 国产精品后入内射日本在线观看 | 免费看片色 | 久久精品国产一区二区三区 | 巨骚综合 | 亚洲黄色在线播放 | 777片理伦片在线观看 | 性精品| 超碰色人阁 | 午夜伦理影院 | 性色视频| 久操视频在线观看 | 97精品人人a片免费看 | 在线亚洲精品 | 亚洲精品v日韩精品 | 九九热在线视频播放 | 精品少妇一区二区三区 | 在线观看黄色片 | www.亚洲视频 | a天堂资源在线观看 | 亚洲欧美偷拍一区 | 久久精品国产亚洲av麻豆图片 | 成人免费影院 | 久久久夜夜夜 | 久久精品色妇熟妇丰满人妻 | 国产在线一区二区三区 | 国产成人无码久久久精品天美传媒 | 性福宝av | 精品欧美乱码久久久久久 | 亚洲日本韩国在线 | 欧美三级在线播放 | 欧美日韩一区二区在线 | 最新色站| 国产伦精品一区二区 | 中文字幕在线观看网 | 国产免费专区 | 色老大网站 | 免费看又黄又无码的网站 | 欧美精品一区二 | 日本一区高清 | 国模精品一区 | 久久综合狠狠综合久久综合88 | 日韩欧美第一区 | 欧美黄色大片视频 | 爱爱视频网站免费 | 日韩欧美国产一区二区在线观看 | 99久久婷婷国产精品综合 | 99在线播放 | 国产精品v日韩精品v在线观看 | 亚洲色图35p | 日韩爽爽视频 | 亚洲午夜毛片 | 欧美日韩久久久 | 日本成人一二三区 | 成人高潮片免费网站 | 国产网红女主播精品视频 | 国产一区二区三区免费 | 日韩免费视频网站 | 成人三级在线播放 | 天天操天天干天天舔 | 亚洲综合一区二区三区 | 亚洲高清av在线 | 成人国产精品久久 | 国产xxxx孕妇 | 精品乱码一区内射人妻无码 | 精品色哟哟 | 国产极品视频在线观看 | 精品少妇一区二区三区 | 色欲AV无码精品一区二区久久 | 亚洲一区二区三区四区在线播放 | 黄色片aaaa | 一级黄色性生活视频 | 日韩综合第一页 | 日韩av电影手机在线观看 | 懂色av一区二区夜夜嗨 | 精品视频一区二区三区在线观看 | 操出白浆视频 | 婷婷色视频 | 一区二区欧美视频 |