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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

wince下sources\sources.cmn\Makefile.def的相关作用

發布時間:2025/4/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wince下sources\sources.cmn\Makefile.def的相关作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1:首先是Makefile.def:

————————————————————————————————————————

在所有驅動的makefile中有!INCLUDE $(_MAKEENVROOT)\makefile.def

找到(_MAKEENVROOT)\makefile.def所在地方C:\WINCE500\PUBLIC\COMMON\OAK\MISC(這個路徑下真是很多wince的精華所在,sysgen菜單的批處理文件就在這里了)

現在來看看這個makefile.def是什么東西。我覺得這個是真的makefile的前奏。

makefile.def非常龐大,不過都是一些環境變量的判斷等,比如RELEASETYPE 的判斷等,如果沒有設置就是默認的。

在它的最后有

!IF EXIST(.\makefile.inc)
!? IFDEF WINCETARGETFILES
!??? INCLUDE .\makefile.inc
!? ELSE IFDEF WINCETARGETFILE0
!??? INCLUDE .\makefile.inc
!? ELSE IF "$(SPECIAL_IRC_DEPENDENT)" != "0" && "$(SPECIAL_IRC_DEPENDENT)" != ""
#
# Added for internationalization
#
!??? INCLUDE .\makefile.inc
!? ENDIF
!ENDIF


!IF EXIST($(_PROJECTROOT)\oak\misc\makefilepost.inc)
!? INCLUDE $(_PROJECTROOT)\oak\misc\makefilepost.inc
!ENDIF

!IF "$(BSP_TW8816_KEY)"=="1"

CDEFINES=$(CDEFINES) -DBSP_TW8816_KEY

!ENDIF

——————從這個可以看出,他結束之后到makefile了:真的好復雜啊。

++++++++++++++++++++++++++++++繼續.................

makefile.def: Including C:\WINCE500\public\common\oak\misc\sources.ReleaseType_DEFAULT
Creating appropriate directories and deleting COMMON.LOC
Copying base resources to C:\WINCE500\public\common\oak\lib\ARMV4I\retail\0409
?mkdir C:\WINCE500\public\common\oak\lib\ARMV4I\retail\0409 > nul 2>&1
?xcopy /I C:\WINCE500\public\common\oak\lib\ARMV4I\retail\*.res C:\WINCE500\public\common\oak\lib\ARMV4I\retail\0409

把一些資源文件拷貝到下面這個路徑(拷貝之前創建)

C:\WINCE500\PUBLIC\COMMON\OAK\LIB\ARMV4I\RETAIL\0409

+++++++++++++++++++++++++++++++繼續..................

現在以2410 SDHC的DLL是如何生成的為例子在build.log找到相應信息。

BUILD_MARKER:LINK_DLL_END
?nmake? /NOLOGO C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\target\ARMV4I\retail\sdhc_sc2410.dll
makefile.def: Invoked with predefined settings:
TARGETNAME: sdhc_sc2410
TARGETTYPE: DYNLINK
RELEASETYPE: OAK
TARGETLIBS: C:\WINCE500\public\common\oak\lib\ARMV4I\retail\sdhc_sc2410_lib.lib C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\ceddk.lib C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\sdcardlib.lib C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\sdhclib.lib C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\sdbus.lib C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\sdk\lib\ARMV4I\retail\coredll.lib
SOURCELIBS:?
DEFFILE: C:\WINCE500\public\common\oak\lib\ARMV4I\retail\sdhc_sc2410.def
EXEENTRY: WinMain
DLLENTRY: DllEntry
makefile.def: BUILDROOT is C:\WINCE500\public\common\cesysgen
0 Please add _COMMONPUBROOT and __PROJROOT to your tree''s cesysgen\sources file.
Directory: C:\WINCE500\PUBLIC\COMMON\CESYSGEN
TARGETNAME: sdhc_sc2410
makefile.def: Including C:\WINCE500\public\common\oak\misc\sources.ReleaseType_OAK//沒有設置ReleaseType即默認OAK了
BUILD_MARKER:LINK_DLL_START Linking C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\sdhc_sc2410.lib
?link -lib -out:C:\WINCE500\PBWorkspaces\KITL\WINCE500\smdk2440a_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\sdhc_sc2410.lib -def:C:\WINCE500\public\common\oak\lib\ARMV4I\retail\sdhc_sc2410.def -machine:thumb @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\nm16D.tmp

————現在知道這個wince下自帶的驅動是如何生成的了。哈哈。

——————————————————————————————————————————

——————————————————————————————————————————

現在再來看BSP下的驅動是如何生成的DLL的。

Linking \WINCE500\PLATFORM\SMDK2440A\Src\Drivers\camera\ directory.
BUILD: [00:0000000746:PROG? ] ''NMAKE.EXE?? -i -c BUILDMSG=Stop.? LINKONLY=1 NOPASS0=1 MAKEDLL=1''
BUILD: [01:0000000747:INFO? ] makefile.def: BUILDROOT is C:\WINCE500\PLATFORM\SMDK2440A

BUILD: [01:0000000748:INFO? ] makefile.def: Including C:\WINCE500\PLATFORM\SMDK2440A\sources.cmn

BUILD: [01:0000000749:INFO? ] Directory: C:\WINCE500\PLATFORM\SMDK2440A\Src\Drivers\camera

BUILD: [01:0000000750:INFO? ] TARGETNAME: camera

BUILD: [01:0000000751:INFO? ] makefile.def: Including C:\WINCE500\public\common\oak\misc\sources.ReleaseType_PLATFORM

BUILD: [01:0000000752:PROGC ] Linking C:\WINCE500\platform\smdk2440a\lib\ARMV4I\retail\camera.lib

BUILD: [01:0000000753:INFO? ] ?link -lib -out:C:\WINCE500\platform\smdk2440a\lib\ARMV4I\retail\camera.lib -def:camera.def -machine:thumb @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\nm91C.tmp

BUILD: [01:0000000754:INFO? ] Microsoft (R) Library Manager Version 7.10.4017

BUILD: [01:0000000755:INFO? ] Copyright (C) Microsoft Corporation.? All rights reserved.

BUILD: [01:0000000756:INFO? ]

BUILD: [01:0000000757:INFO? ] -nodefaultlib

BUILD: [01:0000000758:INFO? ] -ignore:4001

BUILD: [01:0000000759:INFO? ] -subsystem:windowsce,5.00

BUILD: [01:0000000760:INFO? ] obj\ARMV4I\retail\camera.obj

BUILD: [01:0000000761:INFO? ] C:\WINCE500\platform\smdk2440a\lib\ARMV4I\retail\ceddk.lib

BUILD: [01:0000000762:INFO? ]??? Creating library C:\WINCE500\platform\smdk2440a\lib\ARMV4I\retail\camera.lib and object C:\WINCE500\platform\smdk2440a\lib\ARMV4I\retail\camera.exp

BUILD: [01:0000000763:INFO? ] ?set LIB=C:\WINCE500\sdk\CE\lib

BUILD: [01:0000000764:PROGC ] Linking C:\WINCE500\platform\smdk2440a\target\ARMV4I\retail\camera.dll

BUILD: [01:0000000765:INFO? ] ?link /LARGEADDRESSAWARE -out:C:\WINCE500\platform\smdk2440a\target\ARMV4I\retail\camera.dll

—————從這個camera驅動可以看出,BSP和微軟自帶的驅動生成DLL幾乎是一致的,只是第一次生成的lib位置不同而已。

看了build.log文件
已經得出答案:我們選sysgen沒有編譯微軟的源代碼,我們裝上PB的時候他的源代碼的lib已經存在他規定的路徑了。
我們實現的過程就是把他的lib拷貝到工程的相應的路徑下,makefile再把他轉換成DLL——最后打包
注意雖然BSP下的直接規定生成DLL,但是首先也是生成lib的,最后也和微軟自帶驅動一樣,生成DLL

2:source

A、SOURCES文件的結構:

首先我們來看一個SOURCES文件,如下所示,SOURCES主要包括了一些用戶的宏定義,這些宏會被MAKEFILE和NMAKE使用,來編譯項目的源代碼。

!if "$(BSP_NOHSMMC_CH0)"=="1" ##如果SMDK6410.BAT中SET BSP_NOHSMMC_CH0=1那么這個項目將不被編譯。
SKIPBUILD=1
!endif

SYNCHRONIZE_DRAIN=1?
RELEASETYPE=PLATFORM##生成文件存放的位置

TARGETDEFNAME=s3c6410_hsmmc
DEFFILE=$(TARGETDEFNAME).def##指定DLL文件導出接口函數

TARGETNAME=s3c6410_hsmmc0 ##DLL文件名稱
TARGETTYPE=DYNLINK ##表示生成DLL文件

DLLENTRY=DllEntry ##DLL入口地址

##以下是源文件里用的到宏的定義

CDEFINES=$(CDEFINES) # -D_SMDK6410_CH0_EXTCD_ # -D_SMDK6410_CH0_WP_

##以下是頭文件的路徑列表

INCLUDES=$(INCLUDES);..\s3c6410_hsmmc_lib

##以下是要動態鏈接的庫文件

TARGETLIBS= \
??? $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib??? \
??? $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib??? \
??? $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\DriverLib.lib

##以下是要靜態鏈接到目標文件中的庫文件列表

SOURCELIBS=??? \
??? $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\sdcardlib.lib??? \
??? $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\sdbus2.lib??? \
??? $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\s3c6410_hsmmc0_lib.lib

SOURCES=s3c6410_hsmmc.cpp##要編譯的源文件。

B、SOURCES文件調用的流程:

在要被構建的目錄中,如果該目錄中包含SOURCES文件,那么在相同的目錄下一定還有MAKEFILE文件,通常MAKEFILE只包含一行內容:!INCLUDE $(_MAKEENVROOT)\makefile.def

其中_MAKEENVROOT = E:\E600\PUBLIC\COMMON\OAK\MISC (用SET命令查看),其中WINCE600\PUBLIC\COMMON\OAK\MISC\makefile.def 文件大概有3000行,是補所有WINCE 項目共享的公用MAKEFILE模板,在中間可以找到:

!INCLUDE $(MAKEDIR)\sources

這樣makefile.def就包含了本地的SOURCES文件。因此,當構建系統在某個目錄中調用NMAKE時,NMAKE會去使用該目錄中的MAKEFILE,然后MAKEFILE把makefile.def展開到本地,makefile.def還會把本地的SOURCES文件包含進來,這樣本地SOURCES文件中定義的宏與makefile.def中的宏共同起作用,就形成了一份完整的可被NMAKE使用的MAKEFILE。

c:Sources文件(告訴編譯器和連接器如何編譯及連接本驅動程序)
TARGETNAME=SPI //驅動動態庫名字
RELEASETYPE=PLATFORM //發布類型,BSP包中的一個驅動
TARGETTYPE=DYNLINK //目標類型為動態庫
TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib //需要連接的庫
DEFFILE=SPI.def //.def文件名稱
DLLENTRY=DllEntry//動態入口函數名稱 :DllEntry
SOURCES=SPI.c//要編譯的源代碼

3、SOURCES.CMN文件的調用:

sources.cmn文件調用流程也同SOURCES文件一樣的。從WINCE600\PUBLIC\COMMON\OAK\MISC\makefile.def 文件中如下代碼可以看出:

!IF EXIST($(BUILDROOT)\sources.cmn)
!? MESSAGE makefile.def: Including $(BUILDROOT)\sources.cmn
!? INCLUDE $(BUILDROOT)\sources.cmn
!ENDIF

技巧:

盡量將驅動中用到的宏,放到PLATFORM\sources.cmn里面來定義,這樣有一個好處,就是宏定義直觀,方便查看,修改快捷。

sources.cmn是Common Source文件,BSP內所有的源代碼編譯都會用到該文件。里面定義一些比較常用的名詞或環境變量或路徑
source文件是針對特定目錄的,只對當前目錄有效。是針對當前目錄的一些編譯單位的環境變量或指定如何編譯DLL等(將哪些文件或庫編譯進去)

總結

以上是生活随笔為你收集整理的wince下sources\sources.cmn\Makefile.def的相关作用的全部內容,希望文章能夠幫你解決所遇到的問題。

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