驱动工程中的Sources文件详解
举例:
SOURCES主要配置如下:
上述为图片,下为文字:
TARGETNAME=led
使用TARGETNAME来指示生成目标的文件名(不包含扩展名,扩展名PB会自动加上)
RELEASETYPE=PLATFORM
RELEASETYPE指示该文件将要生成的类型,一共有五个取值:
①SDK:使用该类型将使得生成的目标文件被存储到%_PUBLICROOT%/Oak目录,而lib文件被放置到%_PUBLICROOT%/Sdk目录
②DDK:使用该类型将使得生成的目标文件被存储到%_PUBLICROOT%/Oak目录,而lib文件被放置到%_PUBLICROOT%/Ddk
③PLATFORM:使用该类型将使得生成的文件受平台控制
④LOCAL:该类型使得生成的文件全部放置到当前路径
⑤CUSTOM:该类型使得生成的文件放置到TARGETPATH制定的位置(也就是说必须要有TARGETPATH参数设置)
TARGETTYPE=DYNLINK
生成的目标类型,LIBRARY表示是一个lib库,DYNLINK则表示是dll,而PROGRAM则是一个exe文件
TARGETLIBS=
$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib
TARGETLIBS指示连接需要的库的名字
SOURCELIBS=mm.lib
SOURCELIBS指示将于某一个lib一起连接。上面一个lib是需要什么就取什么,而这个lib则是连接所有的。
DEFFILE=led.def
DLL文件的def文件名
INCLUDES=../../inc
指定include的路径
SOURCES=
led.c
指定参与该规则的所有的源文件
第二个则使makefile文件,该文件只需要!INCLUDE $(_MAKEENVROOT)/makefile.def就可以了,建议不要修改(我也不知道如何修改)
第三个文件是def文件,下面是一个该文件的实例
LIBRARY led
生成的库(.lib)文件名(PB自动生成扩展名)
EXPORTS
mm_init
EXPORTS指定了需要导出的函数名称
建立好这些文件之后,选择PB的build菜单的open build releasee directory,到达所在的目录,执行build -c,如果没有错误,就按照我们的要求生成文件了
TARGETNAME
定义模块名称
TARGETPATH=.
路径,“.”是默认路径
TARGETTYPE
模块类型,可以是DYNLINK,LIBRARY,EXE
①如果TARGETTYPE是DLL,则可以定义DLLENTRY,将DLL入口定义成别的不是DLLMain函数,如果DLL的入口是DLLMain,则不需要定义
②如果TARGETTYPE是EXE,则可以定义EXEENTRY,用于指定EXE的入口函数
③如果TARGETTYPE是LIBRARY,则不需要定义入口函数
INCLUDES,如果一个模块需要使用非标准路径下的头文件时,需要定义INCLUDES,用于包含更多头文件的路径,用法如下:
INCLUDES=$(INCLUDES);\new directory\....,注意定义新的INCLUDES时,需要包含INCLUDES原来的值,否则就需要包含所有可能的目录
TARGETLIBS,SOURCELIBS用于定义该模块需要链接哪些库
①TARGETLIBS,如果一个库以DLL的形式提供给调用者,就需要TARGETLIBS,他链接一个函数地址,系统执行时会将被链接库加载。比如coredll.lib就是这样的库文件,是动态链接
②SOURCELIBS,将库中的函数实体链接进来。即静态链接,用到的函数会在我们的文件中形成一份拷贝
注意:内核这个执行文件是没有TARGETLIBS,GIISR.DLL也不能由TARGETLIBS
WINCECOD
如果将其定义为1,则编译器会为每一个文件生成.cod文件,它是一个汇编文件,调试时查看汇编代码也是一种很好的办法。
SOURCES
定义该模块需要哪些源文件