首页 > 解决方案 > Makefile 函数定义参数

问题描述

我有一个看起来像这样的 Makefile:

define cap
  @echo $1
endef

f:
    $(foreach x,$(shell command),$(call cap,$x))

命令输出

x1
x2
x3
x4
x5

让 f 给我

x1 @echo x2 @echo x3 @echo x4 @echo x5

我想要的输出是

x1
x2
x3
x4
x5

我不确定为什么 cap prints echo 这样。

标签: makefileautomation

解决方案


非常简单:每次迭代都会foreach生成字符串@echo ..,然后将它们附加在一起并发送到 shell。因此,在 foreach 循环完成扩展后,您的配方如下所示:

@echo x1 @echo x2 @echo x3 @echo x4 @echo x5

如果你在 shell 中运行它,它会给出你看到的输出。

如果您想将这些作为单独的 shell 命令运行,您可以使用;它们来分隔它们,但您必须删除 ,@因为这不是有效的 shell 运算符:

define cap
   echo $1
endef

f:
         @$(foreach x,$(shell command),$(call cap,$x);)

推荐阅读