2009-03-02 14 views
41

Acabo de recibir una nueva computadora de cuatro núcleos y noté que nmake solo está usando 1 proceso.¿Cómo utilizo todos los núcleos para nmake?

Solía ​​usar make que tenía el interruptor -j4 para iniciar 4 procesos. ¿Cuál es el equivalente de nmake?

[editar] Sobre la base de la información a continuación he sido capaz de añadir un comando a mi archivo de proyecto qmake:

QMAKE_CXXFLAGS + =/MP

Qué hizo efectiva por mí. Muchas gracias.

Respuesta

20

Según MSDN, no hay tal opción para nmake.

Sin embargo, puede hacer que el compilador construir varios archivos en paralelo utilizando la opción /MP con el VC++ compilador de línea de comandos y pasar varios archivos al mismo tiempo:

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

Sin embargo, tenga en cuenta que la mayoría de los Makefiles no lo hacen llame al compilador de esta manera: usualmente invocan el compilador por separado para cada archivo fuente individual, lo que evitaría que la opción /MP hiciera algo útil.

+1

Solo no .o, pero .obj. Los compiladores de VC++ generan .obj, GCC - .o, AFAIK – abatishchev

+15

. Una forma conveniente de usar este indicador es permitir que cl.exe lo recupere de la variable de entorno "CL". Configúralo en las propiedades de tu sistema o escríbelo en la línea de comando: "establecer CL =/MP" – jturcotte

3
+1

que es una compilación paralela de múltiples archivos .cpp en la misma invocación del compilador - construcción no paralela de múltiples objetivos 'make' – Alnitak

+0

¡Es muy interesante cómo activar este conmutador en VS2008! No puedo encontrarlo – abatishchev

+0

no es una opción "nmake", es una opción "c1" (es decir, para usar con el compilador de línea de comandos) – Alnitak

6

Incredibuild afirma ser capaz de ejecutar compilaciones nmake en múltiples núcleos/máquinas múltiples. No tengo ninguna experiencia de eso.

+0

Es muy simple y funciona muy bien. Esta es una buena referencia: http://xoreax.helpserve.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=171 – ttvd

+0

¡Sí! Trabajé en una aplicación. eso tomó aproximadamente 1h 20min. compilar en su totalidad. Con Incredibuild y alrededor de 10 máquinas multiprocesador, la misma aplicación. compilado en 5 min. Mejora bastante impresionante si me preguntas! –

+0

El enlace a la referencia sobre cómo acelerar nMake usando IncrediBuild ha cambiado a [link] (http://xoreax.helpserve.com/staff/Knowledgebase/Article/Edit/105). Descargo de responsabilidad: el autor de este comentario trabaja en IncrediBuild – Dori

3

Esto no funciona para los archivos make normales, pero hay una configuración en Visual Studio 2005 que le permite crear más de un archivo .vcproj al mismo tiempo (siempre que uno no dependa del otro). Herramientas -> Opciones -> Proyectos y soluciones -> Compilar y ejecutar ->X número máximo de compilaciones de proyectos paralelos.

8

El CMake 2.8.1 RC1, que para el momento de escribir esto ya está listo para probar, trae nuevo generador de nmake que se llama NMake Makefiles JOM y genera nmake con ajustes específicos para Jom , que es la caída en reemplazo de NMake. Por lo tanto, ofrece una construcción habilitada para multiprocesamiento utilizando NMake.

37

Otro no relacionados con Qt-forma genérica, a decir nmake utilizar todos los núcleos es establecer variable ambiental CL a /MP:

set CL=/MP 
nmake 

utilizará todos los núcleos de la CPU.

+1

Según tengo entendido, esto solo ayuda si se compilan varios archivos con el mismo comando. – Zitrax

+0

@Zitrax: tienes razón. Normalmente, compila un proyecto (grupo de archivos) para que funcione. –

+2

El proyecto que miré compila unos cientos de archivos, pero cada uno usa un comando cl por separado, como 'cl a.cpp, cl b.cpp, cl c.cpp, ...' Así que quería señalar que no parece ayudar en tal situación con nmake a menos que el sistema de compilación se reescriba para suministrar varios archivos a cada comando cl como 'cl a.cpp b.cpp c.cpp ...'. – Zitrax

Cuestiones relacionadas