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

Ant*_*eru 17 c c++ build

SQLite和googletest带有一个非常易于使用的单文件版本,这使得在其他项目中使用它变得轻而易举,因为您只需要添加一个源文件.他们都使用home-brew工具来创建组合的源文件,所以我想知道是否有更通用的工具呢?它应该采用一个实现/头文件列表并吐出一个组合的头/源,并修复本地包含.我很好,如果它不处理条件包含/包括不同的#defines像Boost.Tuple/MPL之前使用它们.典型的目标库就像ICU.

Dav*_*eas 3

如果您的包含文件定义正确(也就是说,所有头文件中都有保护,并且每个头文件/代码单元包含其所需的所有包含文件),那么您可以“半手动”执行此操作。找到系统标头包含并将其注释掉,然后创建一个仅包含任意随机顺序的所有内容的标头,并预处理该标头(在 gcc 中将是gcc -E),然后对代码单元进行类似的操作。

这种手动方法可能很麻烦,但如果您只需要执行一次就可以了。话又说回来,即使合并头文件可能有意义,我也不想这样做。实际上,我会将这些文件分开,如果您觉得需要简化对它的访问,请提供仅包含其他文件的捆绑标头。这是一些 boost 库采用的方法,您可以在其中包含所需内容的详细信息或包含其他所有内容的单个标头。该代码可以编译/链接到静态库中并像单个元素一样使用。