在makefile中替换for-loop元素?

时间:2012-05-03 02:32:41

标签: makefile

假设我的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,$$文件);不按我想要的方式工作(回显hello.xml而不是hello.ph)? 另外,如果您对如何修改此for-loop元素有任何建议,请告诉我?

2 个答案:

答案 0 :(得分:2)

它不起作用的原因是Make扩展$(subst ...)生成文本,然后传递给shell,并且您尝试根据shell将生成的文本进行替换当它扩展“$ file”时。一个简单的方法是在shell中进行所有扩展:

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

答案 1 :(得分:0)

foreach命令可能会帮助

FILES = hello.py hello2.py hello3.py
PHONY: hi
hi:
    $(foreach file,$(FILES),echo $(subst py,xml,$(file));)

输出

echo hello.xml; echo hello2.xml; echo hello3.xml;
hello.xml
hello2.xml
hello3.xml