Makefile 函数定义参数

Makefile function defintion arguments

我有一个如下所示的 Makefile:

define cap
  @echo 
endef

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

命令输出

x1
x2
x3
x4
x5

make f 给我

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

我想要的输出是

x1
x2
x3
x4
x5

我不确定为什么 cap 打印出这样的 echo。

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

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

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

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

define cap
   echo 
endef

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