for循环变量在gmake中为空

For loop variable is empty in gmake

我有一个这样创建的头文件列表:

expand=$(1)/$(1).h
HDRS=$(foreach x, $(DIRS), $(call expand,$(x)))

这会产生一个像 a/a.h b/b.h ...

这样的列表

但是当我在 for 循环中使用它时:

for i in $(HDRS) ; do \
    echo $$i \
    cp $$i $(some_dir) \
done

$$i 为空。并且 cp 失败,只有一个参数。

$$i 的常用变体 ( $i, $$i, $(i), ${i} ),不改变任何东西,$(HDRS) 的常用变体也不改变("$ (HDRS)”等)。

gmake 将 for 循环回显为

for i in a.h b.h ; \
do \
    echo $i \
    cp $i somedir \
done

看起来正确。

但隐式 bash shell 发出错误“/bin/sh -c:第 5 行:语法错误:文件意外结束”

gmake 然后由于命令失败而退出。

由于 \,make 将配方作为一行发出。这让 shell 感到困惑。试试这个,使用 ; 代替行终止符:

for i in a.h b.h ; \
do \
    echo $i ; \
    cp $i somedir ; \
done