No estoy seguro de si esto es posible solo en un Makefile, pero esperaba escribir un Makefile de forma tal que al intentar construir cualquier objetivo en el archivo detecte automáticamente la cantidad de procesadores en el sistema actual y genere el objetivo en paralelo para la cantidad de procesadores.¿Cómo puedo escribir un archivo MAKE para autodetectar y paralelizar la compilación con GNU Make?
Algo así como los siguientes ejemplos de "pseudo-código", ¿pero mucho más limpio?
all:
@make -j$(NUM_PROCESSORS) all
O:
all: .inparallel
... build all here ...
.inparallel:
@make -j$(NUM_PROCESSORS) $(ORIGINAL_TARGET)
En ambos casos, todo lo que tendría que escribir son:
% make all
Esperemos que tenga sentido.
ACTUALIZACIÓN: Esperando un ejemplo de Makefile para lo anterior. No está realmente interesado en encontrar el número de procesos, pero está interesado en cómo escribir un archivo MAKE para construir en paralelo sin la opción de línea de comando -j.
No intente hacerlo dentro de un Makefile. La técnica estándar, hasta donde puedo decir, es tener un Makefile trivial de nivel superior que llama a otro, en este caso usando algo como $ (MAKE) -j $ (NUM_PROCESSORS) -f $ (THE_REAL_MAKEFILE). – reinierpost
La solución real sería usar una alternativa para make que esté basada en una técnica de modelado de procesos más poderosa, pero no conozco a ningún buen candidato (lo hago por la técnica, pero no por la herramienta). – reinierpost