假设我的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.xml而不是hello.ph)吗?另外,如果您对如何修改这个for-loop元素有任何建议,请告诉我。
发布于 2012-05-03 10:44:39
它不工作的原因是Make扩展了$(subst...)来生成文本,然后将文本传递给shell,并且您正在尝试基于shell在展开"$file“时将生成的文本进行替换。处理此问题的一种简单方法是在shell中进行所有扩展:
FILES = hello.py
PHONY: hi
hi:
-@for file in $(FILES); do \
echo $$file; \
echo $${file%py}xml; \
done发布于 2020-07-29 22:00:47
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.xmlhttps://stackoverflow.com/questions/10424340
复制相似问题