驱动程序中使用CPPUnit
最近研究了一下如何将CPPUnit应用到驱动开发中,下面是一些实现步骤! 我的环境是WDK 6801,安装在C:/WinDDK目录下。IDE环境使用的是Visual Studio 2005。
1. CPPUnit首先需要为WDK特别编译一个版本,使用如下方式配置Visual Studio环境:
A. Visual Studio -> Tools -> Options -> Projects and Solutions -> VC++ Directories
在Include files中添加如下列表,并将它们置顶:
C:/WinDDK/6801.0/inc/api <-将C:/WinDDK/6801.0替换成适当的路径
C:/WinDDK/6801.0/inc/crt
C:/WinDDK/6801.0/inc/ddk
C:/WinDDK/6801.0/inc/api/crt/stl60
B. 在相同界面下Library files中加入下面的列表,也将它们置顶
C:/WinDDK/6801.0/Lib/Crt/i386
C:/WinDDK/6801.0/Lib/wnet/i386 <- Windows 2003使用
在Include files中添加如下列表,并将它们置顶:
C:/WinDDK/6801.0/inc/api <-将C:/WinDDK/6801.0替换成适当的路径
C:/WinDDK/6801.0/inc/crt
C:/WinDDK/6801.0/inc/ddk
C:/WinDDK/6801.0/inc/api/crt/stl60
B. 在相同界面下Library files中加入下面的列表,也将它们置顶
C:/WinDDK/6801.0/Lib/Crt/i386
C:/WinDDK/6801.0/Lib/wnet/i386 <- Windows 2003使用
NOTE:使用这些设置,Visual Studio也可以用来编译WDK驱动程序。
2.打开cppunit工程,然后进行如下设置:
Project Properties -> C/C++ -> Advanced ->Calling Convention 设为 "__stdcall(/Gz)"
*相应的,测试程序也要使用同样的方式 WDK默认就是stdcall.
Project Properties -> C/C++ -> Code Generation -> Runtime Library 设为 "Multi-threaded (/MT)"
*注意此处的不同。它会决定后面所需要使用的静态库,详细的内容可以Google下。
*相应的,测试程序也要使用同样的方式 WDK默认就是stdcall.
Project Properties -> C/C++ -> Code Generation -> Runtime Library 设为 "Multi-threaded (/MT)"
*注意此处的不同。它会决定后面所需要使用的静态库,详细的内容可以Google下。
3. 编译一份cppunit的Release版本。
*最好将它拷贝起来,以和其它类型的cppunit库区分开来。
*最好将它拷贝起来,以和其它类型的cppunit库区分开来。
CPPUnit就算准备好了,现在开始建立一个测试工程。
4. 在sources文件中设定如下:
CPPUNITDIR=C:/project/cppunit <- 指向CPPUnit的工作目录
TARGETNAME=UnitRunner <- 目标程序名称
TARGETPATH=obj
TARGETTYPE=PROGRAM
UMTYPE=console
UMENTRY=main
USE_LIBCMT = 1 <- 我们使用的是/MT,所以这里要使用LIBCMT, 不能使用MSVCRT (/MD)
USE_STL=1 <- 我们需要使用STL,主要是CPPUnit引用的。
STL_VER=60 <- 需要和VS中的STL版本保持一致。这里是STL60
C_DEFINES=$(C_DEFINES) /D_STL60_
4. 在sources文件中设定如下:
CPPUNITDIR=C:/project/cppunit <- 指向CPPUnit的工作目录
TARGETNAME=UnitRunner <- 目标程序名称
TARGETPATH=obj
TARGETTYPE=PROGRAM
UMTYPE=console
UMENTRY=main
USE_LIBCMT = 1 <- 我们使用的是/MT,所以这里要使用LIBCMT, 不能使用MSVCRT (/MD)
USE_STL=1 <- 我们需要使用STL,主要是CPPUnit引用的。
STL_VER=60 <- 需要和VS中的STL版本保持一致。这里是STL60
C_DEFINES=$(C_DEFINES) /D_STL60_
5. 将CPPUnit的路径加入到INCLUDES中
INCLUDES=$(DDK_INC_PATH);$(INCLUDES);$(CPPUNITDIR)/include;
INCLUDES=$(DDK_INC_PATH);$(INCLUDES);$(CPPUNITDIR)/include;
6. 将cppunit库加入到Library列表中:
TARGETLIBS=$(TARGETLIBS) /
......
$(CPPUNITDIR)/lib/WDK/cppunit.lib
TARGETLIBS=$(TARGETLIBS) /
......
$(CPPUNITDIR)/lib/WDK/cppunit.lib
*其它库,视项目需要而定。
7. 确保源正件也正常时,开始编译。
7. 确保源正件也正常时,开始编译。
*注意,因为我们只有编译一个Release版本。