2010-01-23 4 views
10

Meine erste Frage (yay!) Ist über Gnumake und parallele Builds. Hier ist eine kurze Beispieldatei:Paralleles Bauen mit Gnumake und Voraussetzungen

.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 

Wenn ich make -j auf diesem Kerl zu tun, ist das, was ich hier richtig, um sicherzustellen, dass die Befehle für tool_1 ausgeführt werden genau einmal, und vor make versucht jede tool_[234] zu bauen?

Was ich suche ist make -j Ursache tool_1 zu haben zuerst gebaut werden, dann tool_[234] parallel gebaut werden, aber ohne die Befehle für tool_1 dreimal ausgeführt wird. Ich hoffe das ergibt Sinn. Danke für Anregungen oder Ideen!

+0

Es scheint * scheint * zu funktionieren, wie ich es will, aber diese parallele Build-Sachen hat eine Möglichkeit, das Verhalten auf der Grundlage der Systemlast oder von Maschine zu Maschine, etc. zu ändern –

Antwort

8

make -j verhält sich genau so, wie Sie in Ihrer Frage erwarten. Es macht keine Abhängigkeiten mehrere Male.

Was macht diese Pipe (|) in Ihrer Abhängigkeitsliste?

+10

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

+0

Das ist großartig, danke @Alex. Ich konnte nichts in der Dokumentation finden, die direkt herauskam und das sagte. –

+0

Ich dachte, ich wüsste, dass GNU ziemlich gut ist, aber das war ein Feature, das ich vermisst habe. – JesperE