8

次のような Makefile ルールがあります。

%.b : %.a
    [run some commands...]

%.a から %.b へのすべての変換が、ファイルごとに 1 回ではなく、コマンドの 1 回の実行で処理されるように Makefile を書き直したいと思います。

私は次のことを試しました:

%.b : someDummyFile

someDummyFile : 
    [run some commands]

問題は、someDummyFile を作成するためのルールが最初のルールで要求されていない場合でも実行され、望ましくない動作につながることです。ターゲットが他のルールで使用されていない場合でも、依存関係のないルールは常に実行されると思いますか?

ここで何が欠けていますか?


この問題をデバッグしようとして、2 番目のルールへの参照をすべて削除しました。たとえば、次のルールを既存の Makefile に挿入すると、他のルールがそれを参照していないのに、なぜそのルールが実行されるのでしょうか?

HELLOWORLD :
    echo "# HELLO WORLD! THE NEXT LINE WILL TRIGGER AN ERROR"
    DFASDA
4

1 に答える 1

12

これは、あなたが探していることを行うと私が思う簡単な例です:

all: file1.x file2.x

%.x: doWork
    :

doWork:
    touch file1.x
    touch file2.x

doWorkルールが 1 回実行され、ルールの( :no-op)%.xが 2 回実行されます。:、または少なくともそのルールのレシピとして何かが必要です。そうしないと、ファイルを作成するルールがないというエラーが発生し.xます。これは、レシピのないルールであるパターン ルールをキャンセルするために使用される構文の副作用です。

于 2012-07-30T23:54:41.580 に答える