从build.log文件了解wince编译过程(作者:wogoyixikexie@gliet)

来源:互联网 发布:淘宝客服每天工作流程 编辑:程序博客网 时间:2024/06/03 07:58

作者:wogoyixikexie@gliet

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

         以前一直觉得wince编译过程很神秘,想了解又无从下手,现在有位高人提示build.log可以看出wince的整个编译过程,现在就来个了结吧。

         搜索了一下,居然有多个build.log产生,现在先来看C:/WINCE500这个,这个是最大的。

Starting sysgen phase for project ( common )
Found localized resources for Languages ( 0409 0404 0407 040C 0410 0411 0412 0413 0416 041D 0804 0C0A)

Microsoft (R) Program Maintenance Utility Version Test Version
Copyright (C) Microsoft Corporation.  All rights reserved.

Windows CE Version (Release) (Built on Mar  1 2004 21:46:39)
makefile.def: Invoked with predefined settings:
TARGETNAME: dummy
TARGETTYPE: dummy
RELEASETYPE:
TARGETLIBS:
SOURCELIBS:
makefile.def: BUILDROOT is C:/WINCE500/public/common/cesysgen

(C:/WINCE500/PUBLIC/COMMON/CESYSGEN下面包含了makefile等东西)
0 Please add _COMMONPUBROOT and __PROJROOT to your tree's cesysgen/sources file.
Directory: C:/WINCE500/PUBLIC/COMMON/CESYSGEN
TARGETNAME: dummy
RELEASETYPE is not defined.  Using DEFAULT.

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

在所有驱动的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
——————从这个可以看出,他结束之后到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。

谢谢各位的帮助:

 

转载请标明:作者wogoyixikexie@gliet.桂林电子科技大学一系科协,原文地址:http://blog.csdn.net/gooogleman——如有错误,希望能够留言指出;如果你有更加好的方法,也请在博客后面留言,我会感激你的批评和分享。

原创粉丝点击