SQLite和googletest带有一个非常易于使用的单文件版本,这使得在其他项目中使用它变得轻而易举,因为您只需要添加一个源文件。他们都使用home-brew工具来创建组合的源文件,所以我想知道是否有更通用的工具呢?它应该采用一个实现/头文件列表并吐出一个组合的头/源,并修复本地包含。我很好,如果它不像Boost.Tuple / MPL使用它们那样处理条件包含/包括不同的#defines
。典型的目标库就像ICU。
答案 0 :(得分:3)
如果您的包含被正确定义(即所有头文件中都有保护,并且每个标题/代码单元包含它所需的所有包含),那么您可以“半手动”执行此操作。找到系统头包含并注释掉它们,然后创建一个标题,其中包含任何随机顺序的所有内容并预处理标题(在gcc中为gcc -E
),然后与代码单元进行类似操作。
这种手动方法可能很麻烦,但如果你只需要做一次就可以了。然后,即使合并头文件可能有意义,我也不愿意这样做。我实际上会将文件分开,如果您觉得需要简化对它的访问,请提供仅包含其他文件的捆绑标头。这是一些提升库所采用的方法,您可以在其中包含所需内容的详细信息或包含其他所有内容的单个标头。代码可以编译/链接到静态库中,并且就像它是单个元素一样使用。
答案 1 :(得分:3)
试试这个 https://github.com/vinniefalco/Amalgamate/ 也许它可以帮助...
答案 2 :(得分:1)
这在ICU中可能有点有趣,在某些情况下,它有不兼容的定义/包含以及C和C ++以及许多生成文件的混合。也许让我们知道它是怎么回事?
(披露:icu开发商)