2012-09-21 15 views
5

Wenn ich eine Liste von n Befehle haben, c = c1 ... cn, wie kann ich sie, um für ein bestimmtes Ziel ausführen? Ich habe versucht, die foreachWie führe ich jeden Befehl in einer Liste aus?

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

konstruieren, aber das bringt alle Befehle in einer Zeile. Irgendwelche Hinweise?

+1

Klingt wie Sie Bash dafür mehr als Make wollen. – Flexo

Antwort

8

Sie das Problem identifiziert (“ aber das bringt alle Befehle in einer Zeile ”). Sie müssen nur eine neue Zeile anhängen, wenn Sie $x in Ihrer Schleife erweitern.

define \n 


endef 

Jetzt einfach $(foreach x,$c,./$(x)${\n}) in Ihrem Rezept verwenden.

+0

OK, danke bobbogo! –

5

Wenn es keine Notwendigkeit für den Erfolg zu überprüfen ist, dann sollte das Hinzufügen Semikolon arbeiten:

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

Wenn Sie scheitern, wenn einer der Befehl in der Liste Fehler erzeugt, müssen Sie es in den Schritten brechen . Statt direkt die Befehle ausführt, wir die Ausführung in eine Schließfunktion wickeln:

define execute-command 
$(1) 

endef 

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

Sie müssen die Erweiterung jeder Zeile nicht mit einem Tab voranstellen. _Make_ erkennt, dass jede Zeile aufgrund der bereits vorhandenen Registerkarte einen neuen Befehl im Rezept darstellt. – bobbogo

+0

@bobbogo - nett, danke. Vereinfacht die Antwort auf Ihren Vorschlag. – FooF

Verwandte Themen