如何在列表中执行每个命令?

时间:2012-09-21 10:19:08

标签: makefile

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

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

但是将所有命令放在一行上。有线索吗?

2 个答案:

答案 0 :(得分:10)

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

define \n


endef

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

答案 1 :(得分:7)

如果不需要检查是否成功,那么添加分号应该有效:

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

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

define execute-command
$(1)

endef

execute-list:
        $(foreach x,$(c),$(call execute-command,./$(x)))