假设我的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元素有任何建议,请告诉我?
答案 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