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

发布于 2024-08-22 03:15:15 字数 507 浏览 6 评论 0原文

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

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

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

编辑: 感谢您的回答,我忘记提到的一件事是, fooTest.h 的内容不应该是 foo.cpp 和 foo.cpp 的合并结果foo.h。我需要对根 fooTest.h 进行一些小的更改,以使其成为适合测试的模拟模块。因此,仅仅使用 include 是行不通的。我将研究连接这些文件,看看是否可以解决我的问题。

I am trying to create a unit test framework using CPPUnit for a large code base. I need to be able to test individual modules, all of which are part of a module tree that begins with a specific root module.

Due to a non-technical reason, I cannot touch the production file (my original approach involved adding an ifdef to the root module). So I thought of another approach, which is to have create copies of the root module headers as well as copies of headers belonging to modules in the intermediate inheritance hierarchy. Because of the number of number of modules involved as well as the size of each module's source. I'm looking for a way to automatically do that merging for me.

So for foo.h, and foo.cpp, I'm looking for a some kind of a tool that'll output fooTest.h, where fooTest.h contains the declaration AND definition of everything that is in foo.cpp/foo.h

EDIT: Thanks for the answers, one thing I forgot to mention is that, the contents of fooTest.h is not supposed to be the merged result of foo.cpp and foo.h . I need to make minor changes to the root fooTest.h in order to make it a suitable mock-module for testing. Thus, simply using includes won't work. I'll look into concatenating the files and see if that solves my problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

荆棘i 2024-08-29 03:15:15
gcc -E

仅运行预处理器:

 -E 预处理阶段后停止;不要正确运行编译器。
      输出是预处理后的源代码的形式,即
      发送到标准输出。

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

gcc -E

runs just the preprocessor:

  -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.

This will have the effect of inlining all #include directives. It will, however, also grab standard libraries - but these shouldn't be harmful to include multiple times.

烟花易冷人易散 2024-08-29 03:15:15

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

cat foo.h foo.cpp > fooTest.h

This isn't a C++ question - you are asking how to manipulate files in some sort of script. The immediate answer that comes to mind is:

cat foo.h foo.cpp > fooTest.h
绻影浮沉 2024-08-29 03:15:15

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

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

这将导致拖入您处理的每个源文件使用的整个“非标准”标头树,但这应该是无害的。

Write a simple tool that processes only #include "" directives. Note, it should not process "#include <>" directives, and don't touch any other preprocessor directive you encounter.

You'll want to support -I arguments in a gcc like way (or do something equivalent for your compiler if running in a different environment). Should be a afternoon job, and would make a nice open source project (leave a pointer if you do it).

This will result in dragging in the whole tree of "non-standard" headers used by each source file you work on, but that should be harmless.

吾性傲以野 2024-08-29 03:15:15

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

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

Under Visual C++, you can use /P [/EP]

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文