2016-08-22 1 views
1

私のビルドジョブメトリクスのより良いアイデアを得たいですが、残念ながらmakeはタイムスタンプそのものを出力しません。GNU Make - タイムスタンプの出力を最小限のメークファイル変更で追加する方法

私はmake --print-data-baseを実行する場合は、与えられた目標のためには、ライン

# Last modified 2016-08-15 13:53:16 

を出力しますが、それは私に時間を与えるものではありません。各ターゲットを変更することなく、ターゲットを構築する時間を取得する方法は

QUESTION

ありますか?ビルド中に生成されるmakefileの中には、レシピを変更することができないものもあります。

POSSIBLE SOLUTION方法

私ができるimplement a pre- and post-recipe for every targetと出力のタイムスタンプ。

これは良い考えですが、これは並列makeですか?明らかに、すべてのターゲットに対して事前レシピとポストレシピを呼び出すことからビルド時間が長くなるだろうが、それでも問題ないだろう。

答えて

2

これがパラレルメイクの場合、「プレアクション」、「アクション」、および「ポストアクション」がインターリーブされる可能性があります。だから、前アクションと後アクションスクリプトにTARGETNAME変数を渡すことができbehooveう

Pre-action 12:03:05 
Pre-action 12:03:06 
building foo... 
building bar... 
Post-action 12:04:17 
Post-action 12:04:51 

:それはあなたのような出力を得るかもしれない、です。

また、開始日と終了日は、物事を並行して実行しているときに、アクションの所要時間を知るためのものではありません。ルールAはルールBが単独で実行され、ルールAはプロセッサをルールC〜Jと共有しているので、ルールAはルールBよりも時間がかかることがあります。

それ以外はこのアプローチに問題はありません。

+1

'SHELL'は再帰的に展開される変数として再定義することができるので、' SHELL = my-script $ @ 'は目標名を渡すクリーンな方法です。また、 '.SHELLFLAGS'を空にすることはおそらく良い考えです。 –

+0

あなたが退屈ならば、私は[offshoot question]を作った(http://stackoverflow.com/questions/39086951/gnu-make-parallel-how-to-record-idle-vs-active-time-for-a -ジョブ) – Adrian

関連する問題