我在 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 不会创建所有文档集,因为它忽略了附加参数。