0

for ループで別の変数として解釈される変数を取得しようとしていますが、これを行う方法がわかりません。私のテストは次のとおりです。

TEST= one two three

one := one1
two := two2
three := three3

all:
    @echo $(TEST)
    @for NUM in $(TEST) ; do \
        echo $($$NUM) ; \
    done ; exit 0

foo:
    echo

最終結果: 1 つの中央の Makefile を指すインクルードを含む多数の Makefile があります。これらの個々のメイクファイルに、連結するファイルの変数を含めたいのですが、ディレクトリが異なればファイルも異なります。したがって、./1/ の makefile は次のようになります: one := "file0 file1 file2" two := "other0 other1 other2" three := "boo.txt blah.txt" include ../main.mk

および ./2/ 1 := "file0 file5 file6" 2 := "foo bar baz" 3:= "blah.txt" include ../main.mk

4

1 に答える 1

1

それはあなたがそれを書いたようには機能しません。あなたは境界を越えています。

シェルループが実行されている時点で、make変数はすでに展開されているため、ループ本体に含まれるのは「echo;」です。

意図した出力を取得したい場合は、makeレベルでループを実行する必要があります。

何かのようなもの:

TEST= one two three

one := one1
two := two2
three := three3

define loop
        $(foreach n,$(TEST),@echo $($n)
)
endef

all:
        @echo $(TEST)
        $(loop)

もう少し簡単な方法があるはずなのに、今は見えません。

于 2013-02-12T12:57:23.257 に答える