makefile - makefile 函数的奇怪行为
问题描述
我遇到了 $(foreach..) 和 echo 函数的问题。我试图迭代一个变量并将其附加到一个文件中。
这是我的代码:
vars = a b c d
all:
@$(foreach var, $(vars), echo $(var) >> variables.txt)
生成的文件看起来像
a echo b echo c echo d
我不知道为什么它还会打印“echo”这个词以及为什么它在同一行。
我在 Windows 上工作,在 linux 上结果符合预期。
我在这里想念什么?
谢谢。
解决方案
关于输出重定向的有趣事情。您可以将其放在命令的末尾:
echo a b c >> filename
或者在命令中间:
echo a b >> filename c
或在多个地方:
echo a >> filename b >> filename c >> filename
它做同样的事情。
在你的makefile中,这个:
$(foreach var, $(vars), echo $(var) >> variables.txt)
是一个Make迭代。(shell 没有这样的命令foreach
),它扩展为:
echo a >> variables.txt echo b >> variables.txt echo c >> variables.txt echo d >> variables.txt
正如我们所见,这相当于:
echo a echo b echo c echo d >> variables.txt
因此,shell 尽职尽责地回应a echo b echo c echo d
并将其重定向到variables.txt
.
编辑:获得所需效果的最简单方法是添加分号:
vars = a b c d
all:
@$(foreach var, $(vars), echo $(var) >> variables.txt;)
推荐阅读
- c# - c# - 为什么我无法访问 Winform 中的组合框?
- git - 如何使用`git submodules`通过分支跟踪超级项目
- ruby - 使用 Webmock 存根法拉第请求 - 需要帮助
- ios - Flutter:Apple 拒绝了我的应用程序,因为“在不使用 APN API 的情况下推送通知”
- python - 不包含值的 HTML 属性
- hive - 无法在 hive 或 Presto 中查询具有特殊字符的数据
- html - Angular 7:单击后禁用按钮,并在页面刷新后阻止它启用
- javascript - 对球实施抛射运动时出错
- android - 即使再次设置相同的文本,在 TextView 上调用 setText 是否会导致它重绘?
- node.js - 詹金斯构建失败