-1

我在 Mac OS X 上并使用以下 bash 脚本在大约 10 个源代码库上运行 doxygen。

问题是,doxygen 自己在单独的线程上运行最耗时的任务“点”(创建类图)。这会导致等待命令不等待点线程完成。它立即有效地将我返回到命令提示符(仅使用 doxygen 创建文档很快),而 dot 仍在后台生成类图大约一分钟。

#!/bin/bash

DOXY="/Applications/Doxygen.app/Contents/Resources/doxygen"

#run doxygen on all configs
for config in doxygen*.config
do
    $DOXY $config &
done
wait

我曾尝试强制 dot 在单个线程上运行(DOT_NUM_THREADS=1),但这没有帮助。我尝试将等待命令放在循环中,但是只有 doxygen 需要尽可能长的时间,而不需要并行化,并且仍然没有等待 dot 完成。

我需要等待 dot 命令生成所有类图,否则我将在下一步打包/上传不完整的文档。

如何并行化 doxygen 并让它等待所有线程点命令完成?

或者,有没有办法让我在 bash 脚本中确定所有点命令是否已结束(我不知道 doxygen 实际产生了哪些进程/线程,也不知道如何等待它们)?

更新: 我尝试使用 xargs 正确等待所有点线程完成,但速度并不快:

find . -name "doxygen*.config" | xargs -n 1 -P 8 doxygen

这里的问题是我不能将'n'(数字)设置为高于 1,因为 doxygen 不会创建所有文档集,因为它忽略了附加参数。

4

3 回答 3

3

看看这里https://stackoverflow.com/a/8247993/784672,我在这里描述了一种使用标签文件和 GNU 并行实用程序并行运行 doxygen 的方法。

于 2013-03-16T10:26:15.660 回答
0

我认为另一种解决方案(未测试,因为我没有doxygen安装)是doxygen在后台的子shell中作为前台任务运行。这与您找到的解决方案几乎相同,但无需创建第二个脚本:

for config in doxygen*.config; do
    ( $DOXY $config ) &
done
wait
于 2013-03-16T13:51:58.720 回答
0

我找到了解决方案。但首先,我愚蠢地相信我可以加速 doxygen。我已经提到 doxygen 是线程中最耗时的任务(点)。因此:呃!:)

无论如何,对我有用的是使用 doxygen 命令创建另一个 bash 脚本:

#!/bin/bash
DOXY="/Applications/Doxygen.app/Contents/Resources/doxygen"
echo Making $1 …
$DOXY $1

然后原始的 bash 脚本可以并行化任务,并正确等待 dot 完成:

#!/bin/bash

#run doxygen on all configs
for config in doxygen*.config
do
    ./make-doc.sh $config &
done
wait
于 2013-03-16T09:35:30.007 回答