如何使用Make删除循环中的文件扩展名?

时间:2016-11-10 09:23:41

标签: makefile gnu-make

假设有一个包含foo.cbar.cMakefile的目录。 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工作?

1 个答案:

答案 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