2009-03-02 6 views
41

Ich habe gerade einen neuen Quad-Core-Computer und bemerkte, dass nmake nur 1 Prozess verwendet.Wie nutze ich alle Kerne für nmake?

Ich verwendete zu verwenden, die den Schalter -j4 zum Starten 4 Prozesse hatte. Was ist das nmake-Äquivalent?

[Bearbeiten] auf der Grundlage der Informationen unten konnte ich einen Befehl an meine qmake-Projektdatei hinzuzufügen:

QMAKE_CXXFLAGS + =/MP

die für mich tat es effektiv. Danke vielmals.

Antwort

20

Nach MSDN gibt für nmake keine solche Option.

Sie können jedoch der Compiler mehrere Dateien parallel mithilfe der /MP Option mit der VC++ Kommandozeilen-Compiler und Leiten mehrere Dateien gleichzeitig bauen machen:

> cl /MP a.cpp b.cpp c.cpp 

weisen jedoch darauf hin, dass die meisten Makefiles nicht Rufen Sie den Compiler wie folgt auf - normalerweise rufen sie den Compiler separat für jede einzelne Quelldatei auf, was verhindern würde, dass die /MP-Option irgendetwas Nützliches tut.

+1

Nur nicht .o, aber .obj. VC++ - Compiler generieren .obj, GCC - .o, AFAIK – abatishchev

+15

Eine praktische Möglichkeit, dieses Flag zu verwenden, besteht darin, cl.exe von der Umgebungsvariable "CL" abrufen zu lassen. Setzen Sie es in Ihren Systemeigenschaften oder geben Sie es in der Befehlszeile ein: "set CL =/MP" – jturcotte

3
+1

Das ist die parallele Kompilierung mehrerer CPP-Dateien im selben Aufruf des Compilers - nicht paralleles Erstellen mehrerer 'make'-Ziele – Alnitak

+0

Es ist sehr interessant, wie man diesen Schalter in VS2008 einschaltet! Ich kann es nicht finden – abatishchev

+0

es ist keine "nmake" -Option, es ist eine "C1" -Option (dh für den Einsatz mit dem Befehlszeilen-Compiler) – Alnitak

6

Incredibuild behauptet, nmake Builds auf mehreren Kernen/mehreren Maschinen ausführen zu können. Ich habe keine Erfahrung damit.

+0

Es ist wirklich sehr einfach und funktioniert gut. Dies ist eine gute Referenz: http://xoreax.helpserve.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=171 – ttvd

+0

Ja! Ich habe an einer App gearbeitet. das dauerte etwa 1h 20min. vollständig kompilieren. Mit Incredibuild und etwa 10 Multi-Prozessor-Maschinen, die gleiche App. zusammengestellt in 5 min. Ziemlich beeindruckende Verbesserung, wenn Sie mich fragen! –

+0

Der Link zur Referenz zur Beschleunigung von nMake mit IncrediBuild wurde zu [link] (http://xoreax.helpserve.com/staff/Knowledgebase/Article/Edit/105) geändert. Disclaimer - der Autor dieses Kommentars arbeitet bei IncrediBuild – Dori

3

Dies funktioniert nicht für normale Makefiles, aber es gibt eine Einstellung in Visual Studio 2005, mit der Sie mehr als eine .vcproj-Datei gleichzeitig erstellen können (vorausgesetzt, die eine ist nicht abhängig von der anderen). Extras -> Optionen -> Projekte und Lösungen -> Build and Run ->X maximale Anzahl paralleler Projekt-Builds.

8
angenommen haben

The CMake 2.8.1 RC1, wie sie für die Zeit des Schreibens dieses es fertig ist, um zu versuchen, macht für NMake neuen Generator bringen, die NMake Makefiles JOM genannt wird und es erzeugt NMake mit spezifischen Einstellungen für jom , das ist der Tropfen in Ersatz von NMake. Somit ermöglicht es Multi-Processing-fähiges Bauen mit NMake.

37

Eine weitere generische, nicht-Qt-bezogenen Art und Weise nmake zu sagen, alle Kerne zu verwenden, ist die Umgebungsvariable CL zu /MP setzen:

set CL=/MP 
nmake 

wird verwenden, um alle CPU-Kerne.

+1

Wie ich es verstehe, hilft dies nur, wenn mehrere Dateien mit dem gleichen Befehl kompiliert werden. – Zitrax

+0

@Zitrax: Sie sind richtig. In der Regel kompilieren Sie ein Projekt (mehrere Dateien), damit es funktioniert. –

+2

Das Projekt, das ich mir angesehen habe, kompiliert ein paar hundert Dateien, aber jeder benutzt einen separaten cl-Befehl, wie 'cl a.cpp, cl b.cpp, cl c.cpp, ...' Also wollte ich darauf hinweisen scheint in einer solchen Situation mit nmake nicht zu helfen, es sei denn, das Build-System wird so umgeschrieben, dass jedem cl-Befehl mehrere Dateien wie 'cl a.cpp b.cpp c.cpp ...' zur Verfügung gestellt werden. – Zitrax