假设有一个包含foo.c
,bar.c
和Makefile
的目录。 Makefile
的内容是:
loop:
@for f in $(wildcard *.c) ; do \
echo $$f ; \
echo $(basename $$f); \
done
正在运行make
会打印出以下文字:
bar.c
bar.c
foo.c
foo.c
我想要的是:
bar.c
bar
foo.c
foo
所以basename
似乎在这个循环中没有效果。如何让basename
工作?
答案 0 :(得分:3)
您的循环无法在 make 中运行,它是 bash 循环。如果你想在 make eeze中有类似的行为,你可以拥有
loop:
$(foreach f, $(wildcard *.c), \
echo $f; \
echo $(basename $f);)
甚至
loop:
$(foreach f, $(wildcard *.c), \
$(info $f) \
$(info $(basename $f)))
bash eese剥离前缀的方法是:
loop:
@for f in $(wildcard *.c) ; do \
echo $$f ; \
echo $${f%.c} ; \
done