获取for循环中源文件列表的目录部分

时间:2012-06-19 23:55:59

标签: makefile gnu-make

我有以下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循环有关,但我不确定。

1 个答案:

答案 0 :(得分:0)

在执行make - 循环时,您将for变量(或函数)与shell变量混淆。请注意,$(dir ...)是一个make构造,在shell执行命令之前会被make扩展。但是,您希望shell在循环内执行该命令。

您可以做的是将$(dir)替换为shell执行的相应命令dirname。所以它变成了:

for hdrfile in $(_PUBLIC_HEADERS) ; do \
    dirname $$hdrfile ; \
done

这应该会产生预期的结果。