TESTS=test/hello.c
try:
@for t in $(TESTS); do echo $(basename $$t); done
Run Code Online (Sandbox Code Playgroud)
运行“make”我得到
~ make
test/hello.c
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我期望获得基本名称“hello.c”。有什么解释吗?谢谢。
问题是您试图basename在 shellfor循环内使用 Make 指令。$(basename ...)Make 将首先扩展语句(因此$(basename $$t)变为$t),然后传递命令
for t in test/hello.c; do echo $t; done
Run Code Online (Sandbox Code Playgroud)
到外壳。
这将给出test/hello:
@for t in $(basename $(TESTS)); do echo $$t; done
Run Code Online (Sandbox Code Playgroud)
这将给出hello.c:
@for t in $(notdir $(TESTS)); do echo $$t; done
Run Code Online (Sandbox Code Playgroud)