为什么Makefile中的basename无法按预期工作?

时间:2016-10-23 13:45:43

标签: makefile

TESTS=test/hello.c
try:
        @for t in $(TESTS); do echo $(basename $$t); done

运行“make”我得到了

~ make
test/hello.c

这很奇怪,因为我希望得到基本名称“hello.c”。任何解释?谢谢。

1 个答案:

答案 0 :(得分:2)

问题是您尝试在shell for循环中使用Make指令$(basename ...)。 Make将首先扩展$(basename $$t)语句(因此$t变为for t in test/hello.c; do echo $t; done ),然后传递命令

test/hello

到shell。

这将给@for t in $(basename $(TESTS)); do echo $$t; done

hello.c

这将给@for t in $(notdir $(TESTS)); do echo $$t; done

Document