cppUnit中的框架lib文件,在install-win32.txt有说明:
* cppunit (cppunit.lib) : unit testing framework library, the one you use
to write unit tests.
* cppunit_dll(cppunit_dll.dll/lib) : same as above, but build as a DLL.
cppunit.lib 是测试框架的静态链接库版本 (cppunit.lib是release版,cppunitd.lib是debug版)
cppunit_dll.lib和cppunit_dll.dll是测试框架库的动态链接版(同样cppunitd_dll.lib和cppunitd_dll.dll是debug版,不带d的是release版)
如果在vs6和vc9中都用静态链接,对于框架库不存在共存的问题, 只要两个编译器分别将lib目录设置正确即可.
如果都用动态链接,可能会有问题,没有尝试,估计也是向testrunner.dll一样没办法解决.
所以说如果不需要cppunit的mfc的对话框ui界面,并且用静态库,两个编译器分别用一份cppunit的实例没问题.
关键是testrunner, testrunner下的MsDevCallerListCtrl.cpp 第67行 version("7.0") 对于vs2008需要改成version("9.0") 估计vs2005是要改成8.0
所以说对于vc6和vc9, testrunner产生的那四个dll不一样了
cppunit+vc6 用vc9编译出的testrunner 的dll系列会崩溃, 同样
cppunit+vc9 用vc6编译出的testrunner的dll系列会崩溃.
所以需要两个testrunner的dll系列.
我的做法是复制一份cppunit1.12.1, 与之在一个目录层次命名为cppunit1.12.1-vs08,这样就有两个cppunit/lib目录.
而这就注定了,如果想要两个编译器都用cppunit的话,共存不会很完美.
如果将cppunit/lib 添加到环境变量path, 那么只能添加一个路径到环境变量,即使添加两个也只会第一个被优先选择.
假如我添加到path中 $somedirectory/cppunit1.12.1/lib;$somedirectory/cppunit.1.12.1-vs08/lib;
我有两个工程用到了cppunit并且用了mfc的ui,分别用vc6和vc9写的.
现在运行vc6的程序,没问题,一切正常.
运行vc9的程序,必然崩溃.
即使去掉环境变量path中的$somedirectory/cppunit.1.12.1-vs08/lib;也是一样. 因为vc9去找testrunnerud.dll在$somedirectory/cppunit1.12.1/lib找到了,那就直接用了
结果就是崩溃.
解决办法就是对于每个vc9的用到cppunit及mfcUI的项目,都把testrunner的四个dll拷到exe所在的debug目录下,寻找dll会优先从本目录开始,这样就不会有问题
但是每个工程都要拷贝一个dll,还是挺烦人得.
添加到公共目录应该是不行的,因为这和环境变量方法一样了,行不通.
总之,使用cppunit, 使vc6,vc9都能用, 是可以做到的,只是不完美.
哪位高人有更好的方法,望告知.