したがって、次のようなターゲット依存関係を持つメイクファイルがあります。
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xml$(lang)))
targetName ターゲットは次のようになります。
targetName%.xml%: MODEL\=% targetName.xml*
しかし、うまくいきません。次のエラーが表示されます。
make[1]: *** No rule to make target `targetNameMYMODEL.xmlen', needed by `all'. Stop.
ただし、次のように targetName ターゲットでハードコードされた言語を使用して「all」を呼び出すと機能します。
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xmlen))
また、all または targetName に言語を指定せずに「all」を呼び出しても問題なく動作します。おそらく、Makefile はターゲット名に 2 つのパーセント記号が含まれることを好まないのではないかと考えています。
また、私はこの makefile を継承しているので、MODEL\=% の意味を誰か教えてもらえますか? 次のようなターゲットがもう 1 つあります。MODEL%: ;
しかし、\=% の意味がわかりません。
編集:したがって、この応答に基づいてさらに明確にするために:
たとえば、5 つのモデルのリストと 5 つの言語のリストがあります。目標は、言語とモデルの組み合わせごとに 1 つずつ、25 個のファイルを生成することです。
targetName%.xml ターゲットは、本来は targetName.xml というファイルを作成しますが、現在は targetName.xml のようなファイルを作成する必要があるため、2 つの % 記号が必要でした。
上記のように、ネストされた foreach を使用してこれら 2 つのリストを循環していますが、これらの変数をターゲットに渡すのに苦労しています。foreach ステートメントから言語変数をエクスポートしようとしました。targetName%.xml の内容を for ループに入れて、そこで言語をループしようとしました。ループの 'do' 部分に Makefile コマンド (eval など) があるため、後者は機能しません。