用于将C/C++库的所有源文件合并为一个文件的工具是什么?

18

SQLite和googletest都提供了单文件版本,非常易于使用,只需添加一个源文件即可将其轻松用于其他项目中。它们都使用自制工具来创建合并的源文件,因此我想知道是否有更通用的工具可以做到这一点?它应该接受一个实现/头文件列表,并输出一个组合的头文件/源文件,并修复本地包含。如果不支持条件包含/带有不同#defines的包含,例如Boost.Tuple/MPL使用它们,我也可以接受。典型的目标库可能是ICU之类的东西。


Windows或Linux,最好两者都支持。但如果工具只能在其中一个系统上运行,我也可以接受。 - Anteru
3个回答

4

3
如果您的包含(header)定义正确 (即,所有头文件都有守卫(guard),每个头文件/代码单元都包含它所需的所有包含(header)),那么您可以进行 “半手动” 的操作。找到系统头包含并将其注释掉,然后创建一个随机顺序包含了所有内容的头文件,并对头文件进行预处理(在gcc中,这将是 gcc -E),然后以类似的方式操作代码单元。
这种手动方法可能很繁琐,但如果您只需要执行一次就可以了。再说,即使合并头文件可能是有意义的,我也不喜欢这样做。我实际上会让文件保持分离状态,如果您觉得需要简化对它的访问,则提供打包(header bundling)的头文件,其中只包含其他文件。这是某些boost库采用的方法,您可以包含所需内容的详细信息或仅包含其他所有内容的单个头文件。该代码可以编译/链接为静态库,并像单个元素一样使用。

3
这可能在ICU中会有些有趣,因为它在某些情况下具有不兼容的定义/包含以及C和C++的混合和许多生成的文件。也许您可以告诉我们进展如何?(披露:ICU开发人员)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接