-1

私は 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 より大きく設定できないことです。

4

3 に答える 3

3

https://stackoverflow.com/a/8247993/784672をご覧ください。ここでは、タグファイルとGNU並列ユーティリティを使用してdoxygenを並列で実行する方法について説明しています。

于 2013-03-16T10:26:15.660 に答える
0

doxygen別の解決策(インストールしていないため、テストされていません)doxygenは、バックグラウンドのサブシェルでフォアグラウンドタスクとして実行することだと思います。これは、見つけたソリューションとほとんど同じですが、2 つ目のスクリプトを作成する必要はありません。

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 スクリプトはタスクを並列化し、ドットが終了するのを正しく待機できます。

#!/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 に答える