如果我有一个 n 命令列表, c = c1 ... cn ,怎么能我为了给定目标执行它们?我尝试了 foreach 构造
$(foreach x,$(c),./$(x))
但是将所有命令放在一行上。有线索吗?
答案 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)))