我有以下gnu make脚本:
for hdrfile in $(_PUBLIC_HEADERS) ; do \
echo $(dir $$hdrfile) ; \
done
_PUBLIC_HEADERS
变量有一个相对路径列表,如下所示:
./subdir/myheader1.h
./subdir/myheader2.h
我从上面的for循环获得的输出是:
./
./
我希望看到:
./subdir/
./subdir/
我做错了什么?请注意,如果我将代码更改为:
echo $(dir ./subdir/myheader1.h)
它适用于这种情况。我想也许它与for循环有关,但我不确定。
答案 0 :(得分:0)
在执行make
- 循环时,您将for
变量(或函数)与shell变量混淆。请注意,$(dir ...)
是一个make
构造,在shell执行命令之前会被make
扩展。但是,您希望shell在循环内执行该命令。
您可以做的是将$(dir)
替换为shell执行的相应命令dirname
。所以它变成了:
for hdrfile in $(_PUBLIC_HEADERS) ; do \
dirname $$hdrfile ; \
done
这应该会产生预期的结果。