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个进程。
答案 0 :(得分:53)
标记文件通常是
的方法标签文件基本上只是一个结构化的符号列表,其中包含指向文档中位置的链接。标记文件允许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.nl/manual/external.html。