Seite 1 von 1

Paralleles Make

Verfasst: 21. Oktober 2007 19:01
von GloomY
Hallo,

ich benutze MinGW (GCC Port für Windows) und QT4. Wie kann ich make dazu bringen, mehrere parallele Instanzen zu starten, um von meinen beiden CPU-Cores Gebrauch zu machen? Wenn ich z.B.

Code: Alles auswählen

make -j2
eingebe, kommt folgende Meldung

Code: Alles auswählen

mingw32-make: Do not specify -j or --jobs if sh.exe is not available.
mingw32-make: Resetting make for single job mode.
mingw32-make -f Makefile.Release
Und dann macht er normal weiter, nutzt also nur eine CPU.

Was zum Teufel ist sh.exe?

Google hat mir nicht wirklich weitergeholfen, genau so wenig die Suche im Forum. Und das obwohl mir nicht vorstellen kann, dass ich der einzige bin, der mehr als einen Prozessor besitzt und den die relativ langen Compilier-Zeiten bei C++ auf den Keks gehen.

Verfasst: 21. Oktober 2007 21:11
von Christian81
mingw32-make kann keine parallelen builds.

Verfasst: 21. Oktober 2007 23:29
von GloomY
Och nö :cry:
Gibt es denn andere Make-Interpreter (wie nennt sich das?), die das unterstützen? Wie steht's mit nmake, dem Microsoft-VS make-Tool?


Eine Sache, die ich dann aber nicht verstehe: Warum beschwert sich mingw32-make dann über eine fehlende sh.exe (was nun wirklich Windows-spezifisch ist)???

Ich habe mittlerweile durch Google usw. herausgefunden, dass sh.exe nur für die Prozesserzeugung verwendet wird. Um genau zu sein, wird dieses Programm mit zwei Parametern aufgerufen: "-c" und der eigentliche Aufruf des Programms inklusiv Parameter.
Ich hab' in meinem jugendlichen Leichtsinn dann mal probiert eine eigene sh.exe zu schreiben: Ein Konsolenprogramm, welches einfach den zweiten Parameter nimmt und mit diesem einen neuen Prozess startet (mit QProcess::startDetached). An sich funktioniert das einwandfrei, bloß mingw32-make startet dann alle Aufrufe (auch wenn ich nur 2 angebe) und missachtet damit alle Abhängigkeiten. Deswegen geht's natürlich schief :-( ,weil der Linker beginnt die Dateien zu suchen, die aber noch nicht fertig kompiliert sind usw.



Danke aber trotzdem für deine Antwort. :)

Verfasst: 22. Oktober 2007 06:29
von Christian81
Esist wahrscheinlich die sh.exe von msys.

Verfasst: 24. Oktober 2007 02:00
von GloomY
Christian81 hat geschrieben:Es ist wahrscheinlich die sh.exe von msys.
Es scheint dann aber doch irgendwie zu gehen, oder nicht? Wenn ich make -j2 in der MSYS-Umgebung aufrufe, kommt die Shell aber nicht mit den im Makefile erstellten Windows-Pfadnamen mit Backslash klar. :-(

Verfasst: 24. Oktober 2007 06:59
von Christian81
msys (bzw. sh.exe) in den PATH setzen und qmake erneut aufrufen. Sollte dann ein msys Makefile generieren. Weiß aber nicht ob das wirklich so funktioniert wie sie sich das vorgestellt haben.

Verfasst: 1. November 2007 15:06
von GloomY
Christian81 hat geschrieben:msys (bzw. sh.exe) in den PATH setzen und qmake erneut aufrufen. Sollte dann ein msys Makefile generieren. Weiß aber nicht ob das wirklich so funktioniert wie sie sich das vorgestellt haben.
Funktioniert leider nicht. Die Fehlermeldung über die fehlende sh.exe kommt nach wie vor, obwohl ich diese selbst aufrufen kann:
Bild

Verfasst: 1. November 2007 15:11
von Christian81
Dann gehts eben nicht - ist ja nun wirklich nicht das Problem.
Und bitte poste keine Bilder hier im Forum - die Ausgabe kann man auch kopieren!

Verfasst: 21. November 2007 12:33
von tuxlein
Christian81 hat geschrieben:mingw32-make kann keine parallelen builds.

und wie der das kann!

Das Problem liegt unter Windows!

GNU Make 3.80 ob für Windows oder Linux kann Parrallele builds!

Wir hier bei R&S haben das laufen - Buildumgebung von mir!

Der Trick daran ist, das Make kann das nicht ohne eine gescheide Shell das ist das problem das liegt an windows!
Du installierst Cygwin und dann kannst du Parallel builden wenn du das Makefile richtig machst!