2010-01-23 15 views
10

La mia prima domanda (yay!) Riguarda gnumake e build paralleli. Ecco un file di esempio veloce:Edificio parallelo con gnumake e prerequisiti

.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 

Se faccio make -j su questo ragazzo, è quello che ho qui corretto per garantire che i comandi per tool_1 vengono eseguiti una sola volta, e prima make cerca di costruire qualsiasi tool_[234]?

Quello che sto cercando di avere make -j causa tool_1 da costruire prima, poi tool_[234] da costruire in parallelo, ma senza eseguire i comandi per tool_1 tre volte. Spero che abbia un senso. Grazie per eventuali suggerimenti o idee!

+0

* sembra * funzionare come piace a me, ma questo materiale di costruzione parallelo ha un modo di modificare il comportamento in base al carico del sistema o da macchina a macchina, ecc. Prerequisiti di ordine: –

risposta

8

make -j si comporta esattamente come previsto nella domanda. Non crea dipendenze più volte.

Cosa fa il carattere di pipe (|) nell'elenco delle dipendenze?

+10

: http: // www.gnu.org/software/make/manual/make.html#Prerequisite-Types – Amro

+0

È grandioso, grazie @Alex. Non ho trovato nulla nella documentazione che è venuto fuori e l'ho detto. –

+0

Pensavo di conoscere bene GNU, ma questa era una caratteristica che mi mancava. – JesperE