これはおもちゃのMakefileです。 ファイル "a"、 "b"、 "c"、 "a.out"、 "b.out"、 "c.out"を作成したいと思います。makefile関数内の変数が正しく展開されていませんか?
LIST=a b c
all: $(addsuffix .out,$(LIST))
define FUN
in := $(1)
out := $(1).out
$$(in) :
echo $(1) > $$(in)
$$(out) : $$(in)
echo $$(in) > $$(out)
endef
$(foreach p,$(LIST),\
$(eval $(call FUN,$(p))))
私は "-n作る" を使用して、それを実行し、バージョンGNUは4.1を作成し、 実行本当のコマンドがあるテスト:
echo a > c
echo c > c.out
echo b > c
echo c > c.out
echo c > c
echo c > c.out
しかし、期待される結果は次のとおりです。
echo a > a
echo a > a.out
echo b > b
echo b > b.out
echo c > c
echo c > c.out
誰かがMakefileの動作やこのスクリプトを修正する方法を説明できますか?ありがとう。
は、あなたの答えは素晴らしい作品。実際の問題では、ターゲット固有の変数の長いリストなしで 'define ... endef'の中で変数を使用する方法を見つけることを望んでいます。あなたは解決策を知っていますか?ありがとう。 – zhanxw