对C++项目做UnitTest, 如果项目本身输出是一个Library时怎么办? 简单的答案可能是在单元测试期间, 把它换成输出DLL, 毕竟这只需要在Project properties 中改动仅一个地方, 但它可能会引用其它library,要生成DLL或EXE, 还可能需要加入其它的library, 问题是, 这些library添加在什么地方, 如果也是在project properties中添加, 对UnitTest之外显得有些冗余, 还得时时记得在check in时不要把为单元测试做的改动放到source control系统中去.
我的一个办法是用
#ifdef UNIT_TEST_PLUS_PLUS_SUPPORTED
#pragma comment(lib, "C:/Program Files/MSXML 6.0/lib/msxml6.lib")
#endif
但, 注意comment的第二个"参数"中, 可以是一个绝对路径, 其它项目的输出 lib很可能只是散布在那些项目自己的Debug/Release目录中, 但这个绝对路径不能是
"C:\Program Files\MSXML 6.0\lib\msxml6.lib"
这种形式, 因为这里字符串中的\跟C语言中的解析规则类似, \是有特殊含义的, 简单地把\换成/就可以解决这个问题, 而不是用两个\, 看起来很丑陋, 改起来很乏味.
我获取一个文件的完整路径是在Total command中按CTRL + 3, 但这是标准的\路径.
目前把
C:\Program Files\MSXML 6.0\lib\msxml6.lib
转换成
C:/Program Files/MSXML 6.0/lib/msxml6.lib
的办法是: 把它copy到vim中, 用
:s#\\#/#g
0"*y$
做. 但这也要键入不少字符, 最后的办法是用auto hot key通过快捷键在需要时把完整路径名中的\替换成/
:
^!/:: StringReplace, clipboard, clipboard, `\, /, All
一句话, 简单有效.
题外话, 为什么不把那些可能依赖的library永久性地加入项目的输入中去? 毕竟这可能也没多大坏处, 还省得通过一个单元测试的宏来控制.
实际中, 当另一个输出为EXE或DLL的项目要link这个library时, 会出现重复的符号, 导致链接错误.
阅读(1321) | 评论(0) | 转发(0) |