是否有自动方式来合并C ++实现(.cpp)和标头(.h)文件

时间:2010-02-17 20:21:32

标签: c++ unit-testing automated-tests c-preprocessor

我正在尝试使用CPPUnit为大型代码库创建一个单元测试框架。我需要能够测试单个模块,所有模块都是以特定根模块开头的模块树的一部分。

由于非技术原因,我无法触摸生产文件(我的原始方法是在根模块中添加ifdef)。所以我想到了另一种方法,即创建根模块头的副本以及属于中间继承层次结构中的模块的头的副本。由于涉及的模块数量以及每个模块源的大小。我正在寻找一种方法来自动为我合并。

所以对于foo.h和foo.cpp,我正在寻找一种输出fooTest.h的工具,其中fooTest.h包含所有内容的声明和定义Foo.cpp中/ foo.h中

编辑:感谢您的回答,我忘了提到的一件事是,fooTest.h的内容不应该是foo.cpp和foo.h的合并结果。我需要对根fooTest.h进行微小的更改,以使其成为一个合适的模拟模块进行测试。因此,简单地使用包含将不起作用。我将研究连接文件,看看是否能解决我的问题。

5 个答案:

答案 0 :(得分:5)

gcc -E

只运行预处理器:

  -E  Stop after the preprocessing stage; do not run the compiler proper.
      The output is in the form of preprocessed source code, which is
      sent to the standard output.

这将具有内联所有#include指令的效果。但是,它也会获取标准库 - 但这些包含多次不应该是有害的。

答案 1 :(得分:1)

编写一个仅处理#include ""指令的简单工具。注意,处理“#include<>”指令,并且不要触及遇到的任何其他预处理程序指令。

您希望以类似gcc的方式支持-I个参数(或者如果在不同的环境中运行,则为您的编译器执行相同的操作)。应该是一个下午的工作,并且会做一个很好的开源项目(如果你这样做就留下一个指针)。

这将导致拖动您工作的每个源文件使用的“非标准”标题的整个树,但这应该是无害的。

答案 2 :(得分:0)

这不是一个C ++问题 - 你问的是如何在某种脚本中操作文件。想到的直接答案是:

cat foo.h foo.cpp > fooTest.h

答案 3 :(得分:0)

在Visual C ++下,您可以使用/ P [/ EP]

参见参考:http://msdn.microsoft.com/en-us/library/8z9z0bx6%28v=VS.71%29.aspx

答案 4 :(得分:-1)

在* nix下你可以使用cat。

cat foo.h foo.cpp > fooTest.h