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

Aug*_*rom 7 makefile

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

$(foreach x,$(c),./$(x))
Run Code Online (Sandbox Code Playgroud)

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

bob*_*ogo 10

您确定了问题("但是将所有命令放在一行上").只需$x在循环中展开时,只需添加换行符即可.

define \n


endef
Run Code Online (Sandbox Code Playgroud)

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


Foo*_*ooF 8

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

$(foreach x,$c,./$(x);)
Run Code Online (Sandbox Code Playgroud)

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

define execute-command
$(1)

endef

execute-list:
        $(foreach x,$(c),$(call execute-command,./$(x)))
Run Code Online (Sandbox Code Playgroud)

  • 您无需在每个行的扩展名前加上标签。_Make_意识到由于已有标签,每行代表配方中的新命令。 (2认同)