2012-05-12 9 views
29

Puedo establecer el número de subprocesos para el proceso de compilación usando el argumento -j. Por ejemplo, tengo 4 núcleos +4 virtuales. Cuando escribo: make -j8 la velocidad aumenta 4 veces.Paralelo make: set -j8 como la opción predeterminada

¿Es posible establecer ese valor como predeterminado? (Por ejemplo, en Linux Gentoo, en el archivo de configuración, es posible establecer este valor predeterminado).

p.s. Tengo Arch Linux

+1

Esto es más una cuestión de hacer que uno gcc. – Pubby

+0

Entonces ... ¿la opción predeterminada de hacer C++ es 'ejecutar 4 veces más lento que lo posible'? ¡Qué decisión tan extraña! –

+1

@MartinJames Parallel make tiene muchos defectos, por lo que tiene un mal valor predeterminado. – Pubby

Respuesta

30

Su pregunta no es sobre hilos, sino procesos (trabajos) ejecutados por marca.

El simple, forma de establecer esto, cuando se usa maquillaje de la consola es la adición:

alias make="/usr/bin/make -j 8" 

a su archivo .profile.

También puede usar setenv MAKEFLAGS '-j 8', pero MAKEFLAGS puede ignorar este parámetro en algunos escenarios, ya que mantener el número deseado de procesos requiere la comunicación con llamadas recursivas make. Afortunadamente este método works with current versions of GNU Make.

+6

Dado que esto mencionar que "recursive make" no se detiene, me gustaría volver a señalar http://aegis.sourceforge.net/auug97.pdf ... además, el archivo make debe estar bien escrito para permitir incluso para hacer paralelo. A menudo, especialmente los métodos automatizados, ignoran las dependencias reales y hacen que los objetivos se construyan varias veces y los me gusta ... – 0xC0000022L

+0

En caso de que el enlace no funcione en el futuro, el documento se titula "Recursivo se considera perjudicial" y debería ser lo suficientemente fácil encontrar. Vale la pena leerlo. – SystemParadox

+0

¿Qué es 'setenv' aquí? El csh incorporado? – alecov

25

setenv MAKEFLAGS '-j8'

Espero que esto ayude!

5

Así es como lo he hecho:

CORES ?= $(shell sysctl -n hw.ncpu || echo 1) 

all:; @$(MAKE) _all -j$(CORES) 
_all: install lint test 
.PHONY: all _all 
… 

He básicamente "alias" mi objetivo por defecto all a un "privado" _all. El comando para calcular el número de núcleos es específico de OSX, AFAIK, por lo que podría mejorarlo si fuera más multiplataforma. Y debido a la asignación ?=, podemos anularlo con y la variable env si/cuando sea necesario.

EDIT:

También puede añadir a su MAKEFLAGS desde dentro del propio archivo MAKE, así:

CPUS ?= $(shell sysctl -n hw.ncpu || echo 1) 
MAKEFLAGS += --jobs=$(CPUS) 
… 
+1

Esto es en mi humilde opinión mejor que las otras soluciones, ya que puede adaptar esto por Makefile. –

+0

No puede alterar MAKEFLAGS de esta manera. Pruébalo: https://gist.github.com/sanmai/dcc31ae20afa6e8ba4721f174fe05fd9 – sanmai

Cuestiones relacionadas