make: ejecuta varias tareas en paralelo y espera a que se complete
Un objetivo en mi archivo MAKE es una tarea que requiere mucho tiempo y CPU. Pero puedo dividir la carga de trabajo y ejecutar la tarea varias veces en paralelo para acelerar todo el proceso.
Mi problema es que make no espera a que se completen todos los procesos.
Considere este script simple, llamadomyTask.sh
:
#!/bin/bash
echo "Sleeping $1 seconds"
sleep $1
echo "$1 are over!"
Ahora, llamemos a esto desde un script bash y usemoswait
esperar a que se completen todas las tareas:
#!/bin/bash
echo "START"
./myTask.sh 5 &
./myTask.sh 15 &
./myTask.sh 10 &
wait # Wait for all tasks to complete
echo "DONE"
El resultado es el esperado:
START
Sleeping 15 seconds
Sleeping 5 seconds
Sleeping 10 seconds
5 are over!
10 are over!
15 are over!
DONE
Pero al intentar lo mismo en unMakefile
:
test:
echo "START"
./myTask.sh 5 &
./myTask.sh 15 &
./myTask.sh 10 &
wait
echo "DONE"
no funciona
START
Sleeping 5 seconds
Sleeping 15 seconds
Sleeping 10 seconds
DONE
sweber@pc:~/testwait $5 are over!
10 are over!
15 are over!
Por supuesto, podría crear múltiples objetivos que se pueden "construir" en paralelo por make, o dejar que make solo ejecute el script bash que ejecuta las tareas. Pero, ¿hay alguna manera de hacerlo más como lo que ya intenté?