2010-01-23 10 views
10

Mi primera pregunta (¡yay!) Es sobre gnumake y compilaciones paralelas. Aquí hay un archivo de ejemplo rápido:Construcción en paralelo con gnumake y requisitos previos

.PHONY: tool_1 tool_2 tool_3 tool_4 all tools 

all: | tools 

tools: | tool_2 tool_3 tool_4 

tool_1: 
    # commands for tool 1 

tool_2: | tool_1 
    # commands for tool 2 

tool_3: | tool_1 
    # commands for tool 3 

tool_4: | tool_1 
    # commands for tool 4 

Si hago make -j de este tipo, es lo que tengo aquí correcta para asegurar que los comandos para tool_1 se ejecutan exactamente una vez, y antes de make trata de construir cualquiera de tool_[234]?

Lo que estoy buscando es tener make -j causa tool_1 que se construirá en primer lugar, a continuación, tool_[234] que se construirá en paralelo, pero sin ejecutar los comandos para tool_1 tres veces. Espero que tenga sentido. Gracias por cualquier sugerencia o idea!

+0

Parece * estar * funcionando como yo quiero, pero esta estructura paralela tiene una forma de cambiar el comportamiento basado en la carga del sistema o de máquina a máquina, etc. –

Respuesta

8

make -j se comporta exactamente como esperabas en tu pregunta. No hace dependencias varias veces.

¿Qué efecto tiene ese conducto (|) en su lista de dependencias?

+10

requisitos previos solo de pedido: http: // www.gnu.org/software/make/manual/make.html#Rerequisite-Types – Amro

+0

Eso es genial, gracias @Alex. No pude encontrar nada en la documentación que salió directamente y dijo eso. –

+0

Pensé que sabía que GNU funcionaba bastante bien, pero esta era una característica que echaba de menos. – JesperE

Cuestiones relacionadas