1

メイクファイルの冒頭で、実行されるすべての perl スクリプトの依存関係リストを次のように作成しています。

deps_script_1 := $(shell perl $(src)/local_deps.pl $(src)/script_1.pl $(src))
deps_script_2 := $(shell perl $(src)/local_deps.pl $(src)/script_2.pl $(src))
...
deps_script_N := $(shell perl $(src)/local_deps.pl $(src)/script_N.pl $(src))

これらの変数は、後で次のように使用されます。

output_1: $(src)/script_1.pl $(input_1) $(deps_script_1)
        $< $(input_1) > $@

すでに local_deps.pl の各呼び出しを 5 秒から 1 秒未満に短縮しましたが、スクリプトのリストが増えるにつれて、それでも面倒です。

local_deps.pl に依存関係リストをキャッシュし、いつ無効にするかを教えることができますが、それにはより多くのシェルが必要です参考までに、$(src)/lib/perl の変更時刻がそれぞれの出力ファイルよりも新しい場合、無効化が発生します。

私のメイクファイルでネイティブにキャッシュして無効にする方法はありますか?

4

1 に答える 1

1

GCC での依存関係の自動生成と同じアプローチを使用できます。

output_1: $(src)/script_1.pl $(input_1)
    $< $(input_1) > $@
    @perl $(src)/local_deps.pl $< $(<D) > $@.d

-include output_1.d

参照:高度な自動依存関係生成の記事。

アップデート。

output_1.dファイルには次のようなものが含まれている必要があります。

output_1 : dep_1 ... dep_N

dep_1 ... dep_N :

output_1最初の行は、一部のdep_Xファイルがターゲットよりも新しい場合に再構築するよう Make に指示します。2 行目は、前提条件の 1 つを削除した場合に Make がエラーで失敗するのを回避します。

于 2012-06-19T21:03:35.047 に答える