Paralleles Make

Verschiedenes zu Qt
Antworten
GloomY
Beiträge: 6
Registriert: 12. Mai 2007 02:20

Paralleles Make

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

mingw32-make kann keine parallelen builds.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GloomY
Beiträge: 6
Registriert: 12. Mai 2007 02:20

Beitrag 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. :)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Esist wahrscheinlich die sh.exe von msys.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GloomY
Beiträge: 6
Registriert: 12. Mai 2007 02:20

Beitrag 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. :-(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GloomY
Beiträge: 6
Registriert: 12. Mai 2007 02:20

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
tuxlein
Beiträge: 5
Registriert: 21. November 2007 12:26

Beitrag 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!
Antworten