私は Mac OS X を使用しており、次の bash スクリプトを使用して、約 10 個のソース コード ライブラリで doxygen を実行しています。
問題は、doxygen が最も時間のかかるタスク "dot" (クラス ダイアグラムを作成する) を別のスレッドで単独で実行することです。これにより、wait コマンドがドット スレッドの終了を待機しなくなります。効果的にすぐにコマンド プロンプトに戻ります (doxygen でドキュメントだけを作成するのは高速です) が、ドットはまだバックグラウンドでクラス ダイアグラムを生成しています。
#!/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_NUM_THREADS=1) で実行するように強制しようとしましたが、それは役に立ちませんでした。私は待機コマンドをループに入れようとしましたが、それはdoxygenが並列化せずにかかるだけで、ドットが終了するのを待ちません。
ドット コマンドがすべてのクラス ダイアグラムを生成するのを待つ必要があります。そうしないと、次のステップで不完全なドキュメントをパッケージ化/アップロードすることになります。
doxygen を並列化し、スレッド化されたすべてのドット コマンドが終了するまで待機させるにはどうすればよいですか?
または、すべてのドット コマンドが終了したかどうかを bash スクリプトで判断する方法はありますか (doxygen が実際に生成するプロセス/スレッドも、それらを待つ方法もわかりません)。
更新: すべてのドット スレッドが終了するのを適切に待機する xargs を使用してみましたが、それほど高速ではありません:
find . -name "doxygen*.config" | xargs -n 1 -P 8 doxygen
ここでの問題は、追加の引数を無視するため、doxygen がすべてのドキュメントセットを作成しないため、'n' (数値) を 1 より大きく設定できないことです。