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 个进程。
请您参考如下方法:
标签文件通常是要走的路,如果
标签文件基本上只是一个结构化的符号列表,带有指向文档中位置的链接。标签文件允许 doxygen 将一个组件的文档链接到另一个组件的文档。
这是一个 2 步过程:
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
GENERATE_TAGFILE = compA.tag
您会注意到以这种方式运行 doxygen 非常快。
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
使用这种方法,我能够在 3 小时内在标准台式 PC(具有 8Gb RAM 和 Linux 64 位的 Core i5)上为分布在 1500 多个组件上的 2000 多行代码生成文档,包括源浏览、完整调用图和 UML所有数据结构的样式图。请注意,第一步只用了 10 分钟。
为此,我编写了一个脚本,根据组件列表及其直接依赖关系为每个组件生成 Doxyfile。在第一步中,我并行运行 8 个 doxygen 实例(使用 http://www.gnu.org/s/parallel/ )。在第二步中,我并行运行 4 个 doxygen 实例。
见 http://www.doxygen.nl/manual/external.html有关标签文件的更多信息。