alf*_*les 24 performance multithreading doxygen multiprocessing
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
Run Code Online (Sandbox Code Playgroud)
当然,我只是制作东西,但这是我想要的东西的想法.此外,我使用了超过4个进程.
dox*_*gen 54
标记文件通常是这样的方式
标记文件基本上只是一个结构化的符号列表,其中包含指向文档中位置的链接.标记文件允许doxygen从一个组件的文档到另一个组件的文档进行链接.
这是一个两步过程:
首先,在每个组件上运行doxygen,以生成该组件的标记文件.您可以通过禁用所有输出并使用GENERATE_TAGFILE来执行此操作.因此,对于组件A,Doxyfile.tagonly将具有以下设置:
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
GENERATE_TAGFILE = compA.tag
Run Code Online (Sandbox Code Playgroud)
你会注意到以这种方式运行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
Run Code Online (Sandbox Code Playgroud)使用这种方法,我已经能够在标准桌面PC(具有8Gb RAM和Linux 64bit的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.
| 归档时间: |
|
| 查看次数: |
11058 次 |
| 最近记录: |