【问题标题】:For loop variable is empty in gmakegmake中的for循环变量为空
【发布时间】:2018-06-30 03:21:03
【问题描述】:

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

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: line 5: syntax error: unexpected end of file”

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

【问题讨论】:

  • 如果您向我们展示您看到的实际输出(如果有的话),将会非常有帮助。
  • @MadScientist:添加了输出。
  • 它显示了该错误,因为(如下所述)没有分号,cp 和 done 关键字作为参数传递给 echo,而不是被解释为 shell 关键字。

标签: gnu-make


【解决方案1】:

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

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

【讨论】:

  • 那行得通。我认为问题出在变量上,从未检查过 shell 调用。哎呀。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
相关资源
最近更新 更多