WINCE克隆 PUBLIC代码至BSP
最近在整理修改过的PUBLIC至BSP,方便以后管理,顺便做个记录吧,拿控制面板CPLMAIN为例子,
首先说一下 CPLMAIN.cpl 的生成,CPLMAIN.cpl主要是链接cplmain.res和cplmain.lib,生成,而cplmain.res 又是根据你工程的语言区域(以0804 简体中文为例)合并D:\WINCE600\PUBLIC\WCESHELLFE\OAK\LIB\ARMV4I\RETAIL\0804下面的res最后生成。
1. 在你的BSP目录下 新建一个CPLMAIN目录,把D:\WINCE600\PUBLIC\WCESHELLFE\OAK\CTLPNL\CPLMAIN整个目录拷贝过来,并改名为CPLMAIN_LIB,因为它会生成cplmain.lib.
2. 新建CPL目录,这个会生成最终的cplmain.cpl,cplmain.def 可以搜索public 获取,sources文件我们可以先通过sysgen_capture –p WCESHELLFE CPLMAIN获得,然后再做修改。如下
TARGETNAME=cplmain
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
SYNCHRONIZE_DRAIN=1
WINCETARGETFILES=MUI
WINCEOEM=1
DLLENTRY=_DllEntryCRTStartup
DEFFILE=cplmain.def
#DEFFILE=$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\cplmain.def
CPL=1
TARGETLIBS=\
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\cplmain.lib \
!IFDEF SYSGEN_MULTIUI
.\0409\cplmain.res \
!ELSE
.\$(LOCALE)\cplmain.res \
!ENDIF
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\commctrl.lib \
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\commdlg.lib \
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\uuid.lib \
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\ole32.lib \
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\oleaut32.lib \
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib
SOURCES=
其中 WINCETARGETFILES=MUI 是指定了makefile.inc 方便拷贝res至release目录,以便生成MUI。
!IFDEF SYSGEN_MULTIUI
.\0409\cplmain.res \
!ELSE
.\$(LOCALE)\cplmain.res \
!ENDIF
这几行是为了MUI,如果使用了MUI,则会强制链接0409的res,反之会链接当前区域的res。
MAKEFINE.INC文件如下(由于MAKEFILE的检查很规范,注意TAB键)
将拷贝res至相应的RELEASE目录以便生成MUI。
MUI:
copy /y .\0804\$(TARGETNAME).res $(_FLATRELEASEDIR)\0804
copy /y .\0409\$(TARGETNAME).res $(_FLATRELEASEDIR)\0409
3.最后再CPL新建0804,0409目录并拷贝对应的cplmain.res,这个可以从工程release目录下拷过来。
经过上面三个步骤,你就可以自由的修改控制面板的源代码跟res了,即不用修改PUBLIC,也方便了代码管理。以此内推,所有的PUBLIC工程都可以这样修改了。
附目录结构如下:
CPLMAIN
├─CPL
│ │ cplmain.def
│ │ makefile
│ │ makefile.inc
│ │ sources
│ │
│ ├─0409
│ │ cplmain.res
│ │
│ ├─0804
│ │ cplmain.res
│
├─CPLMAIN_LIB
│ └─RES