2009-03-02 9 views
41

Ho appena ricevuto un nuovo computer quad core e ho notato che nmake utilizza solo 1 processo.Come utilizzare tutti i core per nmake?

Ho usato make che aveva l'opzione -j4 per l'avvio di 4 processi. Qual è l'equivalente di nmake?

[modifica] Sulla base delle informazioni di seguito sono stato in grado di aggiungere un comando al mio file di progetto qmake:

QMAKE_CXXFLAGS + =/MP

che di fatto ha fatto per me. Grazie molto.

risposta

20

Secondo MSDN, non esiste un'opzione per la nmake.

È possibile comunque effettuare il compilatore costruire più file in parallelo utilizzando l'opzione /MP con il VC++ riga di comando del compilatore e passando più file allo stesso tempo:

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

Tuttavia notare che la maggior parte Makefiles non lo fanno chiama il compilatore in questo modo - solitamente invocano il compilatore separato per ogni singolo file sorgente, il che impedirebbe all'opzione /MP di fare qualcosa di utile.

+1

Solo non .o, ma .obj. I compilatori VC++ generano .obj, GCC - .o, AFAIK – abatishchev

+15

Un modo conveniente per utilizzare questo flag è consentire a cl.exe di recuperarlo dalla variabile di ambiente "CL". Impostalo nelle proprietà del tuo sistema o digitalo sulla riga di comando: "set CL =/MP" – jturcotte

3
+1

è la compilazione parallela di più file .cpp nella stessa invocazione del compilatore, non la creazione parallela di più target "make" – Alnitak

+0

È molto interessante, come attivare questa opzione in VS2008! Non riesco a trovarlo – abatishchev

+0

non è un'opzione "nmake", è un'opzione "c1" (cioè per l'uso con il compilatore della riga di comando) – Alnitak

6

Incredibuild afferma di essere in grado di eseguire build nmake su più core/macchine multiple. Non ne ho esperienza.

+0

In realtà è molto semplice e funziona alla grande. Questo è un buon riferimento: http://xoreax.helpserve.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=171 – ttvd

+0

Sì! Ho lavorato su un'app. ci sono voluti circa 1h 20min. compilare per intero. Con Incredibuild e circa 10 macchine multiprocessore, la stessa app. compilato in 5 minuti Un miglioramento davvero impressionante se me lo chiedi! –

+0

Il collegamento al riferimento su come accelerare nMake utilizzando IncrediBuild è stato modificato in [collegamento] (http://xoreax.helpserve.com/staff/Knowledgebase/Article/Edit/105). Disclaimer - lo scrittore di questo commento lavora su IncrediBuild – Dori

3

Questo non funziona per i normali makefile, ma in Visual Studio 2005 è disponibile un'impostazione che consente di creare più di un file .vcproj contemporaneamente (a condizione che uno non sia dipendente dall'altro). Strumenti -> Opzioni -> Progetti e soluzioni -> Crea ed esegui ->X numero massimo di build di progetti paralleli.

8

Il CMake 2.8.1 RC1, come per il tempo di scrivere questo è pronto a provare, fa portare nuova generatore per NMake che si chiama NMake Makefiles JOM e genera NMake con impostazioni specifiche per Jom , che è il calo nella sostituzione di NMake. In questo modo, crea edifici abilitati per l'elaborazione multipla utilizzando NMake.

37

Un altro modo generico non-Qt legati a dire nmake di utilizzare tutti i core è quello di impostare la variabile ambientale CL a /MP:

set CL=/MP 
nmake 

userà tutti i core della CPU.

+1

Come ho capito, questo aiuta solo se più file vengono compilati utilizzando lo stesso comando. – Zitrax

+0

@Zitrax: sei corretto. In genere, si compila un progetto (un gruppo di file) in modo che funzioni. –

+2

Il progetto che ho visto compila alcune centinaia di file, ma ognuno usa un comando cl separato, come "cl a.cpp, cl b.cpp, cl c.cpp, ..." Quindi volevo far notare che non sembra essere d'aiuto in situazioni del genere con nmake a meno che il sistema di compilazione non venga riscritto per fornire diversi file per ogni comando cl come 'cl a.cpp b.cpp c.cpp ...'. – Zitrax