2010-01-28 9 views

Respuesta

11

alias make="make -j 8", en el supuesto de Bash

+2

esperar .. ¿cómo afecta esto no recursiva llamada que hace es decir marca -> hacer -j 8 -> hacer -j 8 -j 8 -> hacer -j 8 8 j -j 8 – anon

+6

Los alias cambia el comando make a 'make -j 8' predeterminado. No llama al comando make. – Gazler

+0

Esto también se puede colocar en el archivo .bashrc para que no tenga que ingresarlo en cada shell, .bashrc está en su directorio personal (al menos en Debian). – Grundlefleck

0

¿Por qué no crear un archivo MAKE externo, que llama a otro MAKEFLE como este? Esto se replica del manual here.

 
    SUBDIRS = foo bar baz 
    .PHONY: subdirs $(SUBDIRS) 
    subdirs: $(SUBDIRS) 
    $(SUBDIRS): 
      $(MAKE) -j 8 -C [email protected] 

    foo: baz 
+0

por lo general, cuando desea este tipo de comportamiento, es por máquina, no por proyecto. – xaxxon

10

Las respuestas que sugieren alias make='make -j 8' son buenas respuestas a su pregunta.

Sin embargo, ¡recomendaría no hacerlo!

De todos modos, use un alias para guardar la escritura, pero llámelo de otra manera que no sea make.

Podría estar bien para cualquier proyecto en el que esté trabajando actualmente; pero es bastante posible escribir makefiles con dependencias faltantes que no funcionan del todo bien con -j, y si se encuentra con algo así, se preguntará por qué la construcción falla de manera misteriosa para usted, pero funciona bien para otras personas.

(Dicho esto, si haces alias make, puede obtener bash para ignorar el alias escribiendo \make.)

+0

¿Por qué no simplemente sugerir usar la variable de entorno MAKEFLAGS como dice Eric? – xaxxon

55

establecer el entorno MAKEFLAGS variables a -j 8. Si está utilizando csh o tcsh, puede hacerlo con setenv MAKEFLAGS '-j 8'. Si está utilizando bash, puede hacerlo con export MAKEFLAGS='-j 8'. Es posible que desee poner este comando en el archivo de inicio de su shell, como .cshrc o .bashrc (en su directorio de inicio).

Precaución: Establecer un valor predeterminado como este se aplicará a todas las invocaciones de marca, incluso cuando "crea" un proyecto distinto al suyo o ejecuta un script que invoca make. Si el proyecto no estaba bien diseñado, podría tener problemas cuando se genera con múltiples trabajos que se ejecutan en paralelo.

+0

No funcionará con GNU Make 4.1 – sanmai

-1

Se podía mover /usr/bin/make a /usr/bin/make_orig y hacer /usr/bin/make este script:

#!/bin/sh 

/usr/bin/make_orig -j 8 [email protected] 

Asegúrese de ejecutar chmod +x /usr/bin/make.

Pruebe este método si el método más simple en my other answer no funciona. Este método no es tan seguro y es un poco complicado.

+0

Esto es simplemente malo. Imagina si alguna vez necesitas actualizar tu make binary. – sanmai

+0

@sanmai Sí, MAKEOPTS es mucho mejor; cf. [mi otra respuesta arriba] (https://stackoverflow.com/questions/2151605/make-make-default-to-make-j-8/42658101#42658101). – Geremia

1

Añadir

MAKEOPTS='-j8' 
MAKEFLAGS='-j8' 

a /etc/make.conf (crearlo si no existe).

Si eso no funciona, añadir

export MAKEOPTS='-j8' 
export MAKEFLAGS='-j8' 

a su perfil de todo el sistema (por ejemplo,/etc/profile).

Para mí, MAKEOPTS solo no funcionó. Posiblemente MAKEFLAGS es todo lo que se necesita.

+0

Para que lo sepas, tampoco puede hacer que esto funcione. https://gist.github.com/sanmai/dcc31ae20afa6e8ba4721f174fe05fd9 – sanmai

+0

@sanmai ¿Por qué no? Esto funciona para mi. – Geremia

+0

Compruebe la esencia para ver por usted mismo. 'MAKEFLAGS' solo conserva' -j', sin dígitos – sanmai

Cuestiones relacionadas