MVC开发模式下快捷地调试控制功能

在做车载导航整机方案的时候采用MVC模式进行开发可以高效的工作,因为视图和控制是并行开发的(由不同的工程师进行),在控制功能改变的情况下必须要提交给视图开发者重新生成应用程序再返回给控制开发者,这样做很麻烦。可以利用M$的命令行编译工具nmake结合从EVC导出的Makefile文件(要做一些改动),用批处理文件执行将视图的中间代码(obj和res文件)和控制功能的lib链接生成应用程序。这样的话只需要视图开发者提供一个稳定的版本,生成应用程序的工作就可以与之完全脱离开。具体的介绍如下

1、从UI的EVC工程中导出Makefile文件,它的后缀是vcn,里面有大量的信息可以去掉生成一个简单明了的文件,如下:

# Microsoft eMbedded Visual Tools Generated NMAKE File, Based on TEST.vcp !IF $(CEVersion) < 201 CECrt=L CECrtDebug=Ld CECrtMT=T CECrtMTDebug=Td CENoDefaultLib=corelibc.lib CEx86Corelibc= !ELSE CECrt=C CECrtDebug=C CECrtMT=C CECrtMTDebug=C CENoDefaultLib=libc.lib /nodefaultlib:libcd.lib /nodefaultlib:libcmt.lib /nodefaultlib:libcmtd.lib /nodefaultlib:msvcrt.lib /nodefaultlib:msvcrtd.lib CEx86Corelibc=corelibc.lib !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF !IF "$(CFG)" == "TEST - Win32 (WCE ARMV4I) Release" OUTDIR=./ARMV4IRel INTDIR=./ARMV4IRel # Begin Custom Macros OutDir=./ARMV4IRel # End Custom Macros ALL : "$(INTDIR)/TEST.exe" CLEAN : -@erase "$(INTDIR)/TEST.obj" -@erase "$(INTDIR)/StdAfx.obj" -@erase "$(INTDIR)/TEST.pch" -@erase "$(INTDIR)/TEST.res" -@erase "$(OUTDIR)/TEST.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" RSC=rc.exe RSC_PROJ=/l 0x409 /fo"$(INTDIR)/TEST.res" /d UNDER_CE=$(CEVersion) /d _WIN32_WCE=$(CEVersion) /d "UNICODE" /d "_UNICODE" /d "NDEBUG" /d "$(CePlatform)" /d "THUMB" /d "_THUMB_" /d "ARM" /d "_ARM_" /d "ARMV4I" /d "_AFXDLL" /r LINK32=link.exe LINK32_FLAGS=coredll.lib control.lib /nologo /base:"0x00010000" /stack:0x10000,0x1000 /entry:"wWinMainCRTStartup" /incremental:no /pdb:"$(OUTDIR)/TEST.pdb" /out:"$(OUTDIR)/TEST.exe" /libpath:"$(INTDIR)" /subsystem:$(CESubsystem) /MACHINE:THUMB LINK32_OBJS= / "$(INTDIR)/TEST.obj" / "$(INTDIR)/StdAfx.obj" / "$(INTDIR)/TEST.res" "$(OUTDIR)/TEST.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF

在此例中,因为只生成了一个基于MFC的Dialog程序,所以obj文件只有二个,res文件只有一个,在实际开发中UI的中间文件可能比这个要多;在LINK32_FLAGS选项中control.lib就是控制的lib,也就是需要调试的模块,另LINK32_FLAGS参数在实际开发中也有可能不只一个控制模块。

2、命令行编译脚本,只生成了release版本,可以根据实际需要增加debug版本。

rem ==================================================================================================== if "%OSVERSION%"=="" set OSVERSION=WCE500 if "%PLATFORM%"=="" set PLATFORM=S80 if "%WCEROOT%"=="" set WCEROOT=d:/Program Files/Microsoft eMbedded C++ 4.0 if "%SDKROOT%"=="" set SDKROOT=d:/Program Files/Windows CE Tools set PATH=%WCEROOT%/COMMON/EVC/bin;%WCEROOT%/EVC/%OSVERSION%/bin;%path% set INCLUDE=%SDKROOT%/%OSVERSION%/%PLATFORM%/include/ARMV4I;%SDKROOT%/%OSVERSION%/%PLATFORM%/MFC/include;%SDKROOT%/%OSVERSION%/%PLATFORM%/ATL/include;d:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/NETSAMP/INC;d:/WINCE500/PUBLIC/COMMON/SDK/INC;d:/WINCE500/PUBLIC/COMMON/OAK/INC set LIB=%SDKROOT%/%OSVERSION%/%PLATFORM%/lib/ARMV4I;%SDKROOT%/%OSVERSION%/%PLATFORM%/MFC/lib/ARMV4I;%SDKROOT%/%OSVERSION%/%PLATFORM%/ATL/lib/ARMV4I; set CC=clarm.exe set TARGETCPU=ARMV4I rem 注意SET语句不能有多余的空格,特别是行结束的地方 set CESubsystem=windowsce,5.0 set CEVersion=500 set vcnfile=TEST.vcn set CFG=TEST - Win32 (WCE ARMV4I) Release set errortxt=error."%CFG%".txt nmake /a /x %errortxt% /f %vcnfile% CFG="%CFG%" CESubsystem=%CESubsystem% CEVersion=%CEVersion% CEConfigName="%PLATFORM%" pause rem ====================================================================================================

你可能感兴趣的:(mvc,Microsoft,null,dialog,Path,makefile)