10

如果我有n 个命令的列表c = c1 ... cn,我如何才能为给定的目标执行它们?我尝试了foreach构造

$(foreach x,$(c),./$(x))

但这会将所有命令放在一行上。有什么线索吗?

4

2 回答 2

14

如果不需要检查是否成功,那么添加分号应该可以工作:

$(foreach x,$c,./$(x);)

如果列表中的命令之一返回失败,则需要失败,则需要逐步中断它。我们不是直接执行命令,而是将执行包装在一个 make 函数中:

define execute-command
$(1)

endef

execute-list:
        $(foreach x,$(c),$(call execute-command,./$(x)))
于 2012-09-21T10:24:26.000 回答
14

您发现了问题(“但这将所有命令放在了一行”)。$x每当您在循环中展开时,您只需要添加一个换行符。

define \n


endef

现在只需$(foreach x,$c,./$(x)${\n})在你的食谱中使用。

于 2012-09-21T10:46:20.117 回答