2012-09-21 11 views
5

Si tengo una lista de n comandos, c = c1 ... cn, cómo ellos pueden ejecutar I con el fin de un objetivo determinado? Probé la foreach construir¿Cómo ejecuto cada comando en una lista?

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

pero que pone todos los comandos en una sola línea. ¿Alguna pista?

+1

Parece que quieres bash para eso más que Make. – Flexo

Respuesta

8

Ha identificado el problema (“ pero que pone todos los comandos en una sola línea ”). Solo necesita añadir una nueva línea cada vez que expanda $x en su ciclo.

define \n 


endef 

Ahora simplemente use $(foreach x,$c,./$(x)${\n}) en su receta.

+0

OK, gracias bobbogo! –

5

Si no hay necesidad de comprobar si hay éxito, a continuación, añadir punto y coma debe trabajar:

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

Si tiene que fallar si uno de los comandos en la lista de las declaraciones fracaso, es necesario dividirla en pasos . En lugar de ejecutar directamente los comandos, envolvemos la ejecución en función de la marca:

define execute-command 
$(1) 

endef 

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

No es necesario que prefija la expansión de cada línea con una pestaña. _Make_ se da cuenta de que cada línea representa un nuevo comando en la receta debido a la pestaña ya. – bobbogo

+0

@bobbogo - bonito, gracias. Simplifica la respuesta según tu sugerencia. – FooF

Cuestiones relacionadas