2

私の Makefile が次のようになっているとします。

FILES = hello.py
PHONY: hi
hi:
    -@for file in $(FILES); do \
            (echo $$file; \
            echo $(subst py,xml,$$file); \
            echo $(subst py,xml,hello.py)); \
    done

make が呼び出されると、次のように表示されます。

hello.py
hello.py
hello.xml

echo $(subst py,xml,$$file); の理由を教えてください。思い通りに動かない (hello.ph の代わりに hello.xml をエコーする)? また、この for ループ要素を変更する方法について何か提案があれば教えてください。

4

2 に答える 2

2

動作しない理由は、Make が $(subst...) を展開してテキストを生成し、それをシェルに渡し、展開時にシェルが生成するテキストに基づいて置換を行おうとしているためです。 「$ファイル」。これを処理する簡単な方法は、すべての展開をシェルで行うことです。

FILES = hello.py
PHONY: hi
hi:
    -@for file in $(FILES); do \
            echo $$file; \
            echo $${file%py}xml; \
    done
于 2012-05-03T02:44:38.933 に答える