Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349668
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2010-01-07 08:51:02

对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时, 会出现重复的符号, 导致链接错误.
阅读(1323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~