2011-08-24 16 views
5

GNU Makeファイルがたくさんあります。私は、パフォーマンスのボトルネックを特定するためにビルド中に使用された各ターゲットの時間を計測したいと思います。便利で自動化された方法でこれを行うツールやテクニックはありますか?GNU Makeファイルのパフォーマンス解析方法

これらの結果を解析して、ビルドの変化と成長に伴いパフォーマンスの要因を把握したいかもしれませんが、すでにかなり大きく複雑です。

答えて

4

私は前にここにこの質問を見たと思う...

あなたはシェルが、倍の実行を呼び出し、どこかで一緒にターゲット名を持つ結果を書き込み何かでシェルを置き換えることができます。各ターゲットは一度だけ構築されます(またはmakeは実行を拒否する)ので、時間を一緒に追加するだけです。

非常に粗製の例:あなたが一緒に時間を追加したくない場合は、あなたも何とか単一にターゲットごとにコマンドを参加する必要があり

make SHELL='echo [email protected]: && time sh' 

make 

を置き換えますコマンド。これを行う1つの方法は、Makefileを前処理することですが、いろいろな理由から、Makefileの最も単純なものではうまくいきません。

など。何かを試してみる

perl -0pe 's/([^:])\s*\n\t[@-]?/$1; /g' Makefile | make -f - SHELL='echo [email protected]: && time sh' 

はその方向に非常に粗いスタブです。

さまざまな代替アプローチがありますが、唯一の実際の解決策は、この機能を追加することです。 GNU makeはとてもポータブルなC言語で書かれているので、それほど難しいことではありません。

+0

「SHELL」...賢い –

1

ボックスの外側を考える:あなたは、すなわち、どこのサブディレクトリにCDをルールと再び作る呼び出し、再帰的なメイクを使用して貴重な電子を無駄に偶然ですか?それがあなたの問題です。非再帰的なmakeは、2桁の速さで実行できます。詳細について

以下は、各コマンドが実行されている方法を理解し、どのように何回あるため、誤って使用される変数のだろうRecursive make considered harmful

0

を参照してください:、:=

make SHELL='/bin/sh -x' 
0

プロファイルにしようとしている場合

https://github.com/gojuno/make-profiler

これ行為:静的Makefileは、メイクプロファイラを見てのラッパーのように、前処理はMakefileで、ログを収集し、タイミング情報を含むコールグラフを描画します。これは、長時間実行されるデータ処理パイプラインを作成する場合に特に便利です。