2012-09-21 13 views
5

Se ho un elenco di n comandi, c = c1 ... cn, come posso eseguire in ordine per un determinato obiettivo? Ho provato foreach costruireCome eseguo ciascun comando in un elenco?

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

ma che mette tutti i comandi su una riga. Qualche indizio?

+1

Sembra che tu voglia fare qualcosa di più del Make. – Flexo

risposta

8

identificato il problema (“ ma che mette tutti i comandi su una riga ”). È sufficiente aggiungere una nuova riga ogni volta che si espande $x nel proprio ciclo.

define \n 


endef 

Ora utilizzare semplicemente $(foreach x,$c,./$(x)${\n}) nella propria ricetta.

+0

OK, grazie bobbogo! –

5

Se non c'è bisogno di controllare per il successo, quindi aggiungendo virgola dovrebbe funzionare:

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

Se avete bisogno di esito negativo se uno dei comandi nella lista restituisce fallimento, è necessario rompere procedere a piccoli passi . Invece di eseguire direttamente i comandi, ci avvolgiamo l'esecuzione in una funzione marca:

define execute-command 
$(1) 

endef 

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

Non è necessario aggiungere un prefisso all'espansione di ogni riga con una scheda. _Make_ realizza che ogni linea rappresenta un nuovo comando nella ricetta a causa della scheda già. – bobbogo

+0

@bobbogo - bello, grazie. Semplificata la risposta secondo il tuo suggerimento. – FooF

Problemi correlati