0

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

4

1 回答 1

0

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

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

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

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

于 2012-06-20T02:57:06.203 回答