多线程 – Doxygen慢

Doxygen需要大约12个小时才能运行在我们的代码库中。这主要是因为有很多代码来处理(〜1.5M行)。然而,我们很快接近我们不能做夜间文档更新,因为它们花费的时间太长。我们已经不得不将图形深度降低到12小时。

我尝试了标准的方法,但我确实需要高质量的输出,包括图形和SEARCH_INCLUDES。我有一个相当不错的机器来运行Doxygen,但是Doxygen没有利用它的许多核心。 (它在构建服务器上占用单个CPU,但只有可用系统的4%)。拥有多线程Dot构建方式很方便,但这只是构建时间的一半左右。

有没有什么技术可以用来通过多个进程运行doxygen并手动分片任务?我看过一些关于创建标签文件的讨论,但是我不明白他们是否会做我想要的。我正在寻找的是像:

doxygen Doxyfile-folder1
doxygen Doxyfile-folder2
doxygen Doxyfile-folder3
doxygen Doxyfile-folder4
doxygen-join output/folder1/html output/folder2/html output/folder3/html output/folder4/html

当然,我只是做了一些事情,但这是我正在寻找的一个想法。此外,我会使用超过4个进程。

标签文件通常是如何去的

>你有一些逻辑一致的源文件(让我们称之为组件)和
>你知道组件之间的依赖关系,例如组件A使用组件B和C,组件B仅使用C和
>索引文件(例如,文件/类/功能的列表)被限制为单个组件是好的(甚至是优选的)。
>你对HTML输出感兴趣

标签文件基本上只是一个结构化的符号列表,其中包含文档中位置的链接。标签文件允许doxygen从一个组件的文档到另一个组件的文档进行链接。

这是一个两步的过程:

>首先,在每个组件上运行doxygen以生成该组件的标签文件。您可以通过禁用所有输出并使用GENERATE_TAGFILE来执行此操作。因此对于组件A,Doxyfile.tagonly将具有以下设置:

GENERATE_HTML         = NO
GENERATE_LATEX        = NO
GENERATE_RTF          = NO
GENERATE_MAN          = NO
GENERATE_TAGFILE      = compA.tag

你会注意到,以这种方式运行doxygen是非常快的。
>第二步是生成实际文档。对于组件A,您需要一个包含组件B和C的标记文件的Doxyfile,因为我们确定A依赖于这些组件。

GENERATE_HTML         = YES
GENERATE_LATEX        = NO
GENERATE_RTF          = NO
GENERATE_MAN          = NO
TAGFILES              = path/to/compB/compB.tag=path/to/compB/htmldocs \
                        path/to/compC/compC.tag=path/to/compC/htmldocs

使用这种方法,我已经能够在标准台式PC(具有8Gb RAM和Linux 64位的Core i5)上生成了在3小时内分布在1500个组件上的20M行代码的文档,包括源浏览,完整调用图和UML-所有数据结构的样式图。请注意,第一步只需10分钟。

为了实现这一点,我创建了一个脚本来根据组件列表及其直接依赖关系为每个组件生成Doxyfile。在第一步我并行运行8个doxygen实例(使用http://www.gnu.org/s/parallel/)。在第二步,我并行运行4个doxygen实例。

有关标签文件的更多信息,请参阅http://www.doxygen.org/external.html

http://stackoverflow.com/questions/8247189/doxygen-is-slow

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:多线程 – Doxygen慢