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
我有一个这样创建的头文件列表:
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