假设我的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 循环元素有任何建议,请告诉我?
最佳答案
它不起作用的原因是 Make 扩展 $(subst...) 以生成文本,然后将其传递到 shell,并且您尝试根据 shell 将生成的文本进行替换当它展开“$file”时。处理这个问题的一个简单方法是在 shell 中进行所有扩展:
FILES = hello.py
PHONY: hi
hi:
-@for file in $(FILES); do \
echo $$file; \
echo $${file%py}xml; \
done
关于makefile - makefile 中的 subst for-loop 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424340/