Pregunta

¿Qué disposición trabaja para GNU realizar trabajos paralelos (-j) en Windows?

He intentado fijar la cáscara para cmd.exe utilizando MinGW hacer 3.81, esto funciona en la creación de los múltiples procesos, pero hacen un error con el mensaje "Esperando trabajo".

Puede este trabajo y cuál es la mejor configuración? (MinGW / Cygwin / ???) ¿Puede alguien que me señale un ejemplo de trabajo para poner a prueba en contra?

¿Fue útil?

Solución

Nunca he tenido ningún promblems utilizando make -jn bajo Cygwin. Funciona bastante bien. Yo uso regularmente con el compilador cl.exe de Microsoft. Simplemente funciona fuera de la caja para mí. Muy tipo UNIX, que es una buena cosa ™. Construir puerto guiones muy bien a Linux y Mac. Totalmente recomendado.

Nunca le gusta hacer MinGW desde que llegué a un lugar donde 5 copias de barras eran demasiado pocos, sin embargo, seis eran demasiados. ¡Suspiro! (Para ver con MinGW hacks para hacer de barra invertida nombres de rutas separadas permisible en make AFAIK.)

Otros consejos

Por lo que yo puedo entender, trabajos paralelos de GNU make dependen de la plataforma subyacente para suministrar información (CPU) de carga. Esto es, por desgracia hace de una manera no compatible con Windows, y sólo el "hacer -j" comando no hace nada scalingwise. Ese comando (sin número máximo de puestos de trabajo) es potencialmente muy peligroso, ya que va a comer la memoria como un perro hambriento rabioso (lo probé en Qt, y se estrelló en QtWebKit, el mayor proyecto de Qt, 4 GB de RAM, Windows 7).

En el segundo pensamiento, me da la sensación de maquillaje -j3 corre más rápido que hacer, pero a la luz de lo que puedo encontrar en la web (foros, manual ...) Me parece muy POSIX / Linux funcionalidad específica.

Por cierto, me sorprende su pregunta fue rechazada.

Un consejo que podría ayudar a los usuarios CRealice

La opción -Jn no funciona Cuando llama un makefile hacen de forma recursiva como cmake-archivos make normalmente lo hacen. Pero hay un remedio que funciona porque una vez más en los makefiles generados CMake llama a través de una sintaxis tal.

$(MAKE) -f CMakeFiles\Makefile2 <subproject>

Esto significa que puede modificar la variable de MAKE:

mingw32-make "MAKE=mingw32-make -j3"

Ahora, cada vez que se inicia un subproyecto-make, se pone de nuevo la opción "-j3". Pero tenga en cuenta que esto efectivamente no limita el número de compilaciones paralelas a 3, como se podría esperar. Si usted tiene más de 3 proyectos que no dependen el uno del otro en la misma jerarquía a continuación, los 3 proyectos se basarán en paralelo y cada uno de ellos lanza 3 pasos de compilación. Resultando en 9 pasos de compilación paralelas.

Cuando volvemos a mirar de cerca en el Makefile superior generada por cmake entonces vemos que el objetivo de "todos" esencialmente sólo comienza una sub marca.

$(MAKE) -f CMakeFiles\Makefile2 all

Así podemos eliminar una capa de paralelismo subproyecto llamando

mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all

Pero esto sacrifica el progreso de informes.

Espero que esta ayuda, sin embargo.

este de Danny Thorpe entrada de blog que explica los problemas con maquillaje paralelo construyen en Windows. Básicamente lo que sugiere es establecer en primer lugar la siguiente variable de entorno:

set SHELL=cmd.exe

Con esto, yo era capaz de ejecutar el comando estilo make -j, pero por desgracia no el comando controlado estilo make -jN.

he resuelto este problema por lo que comparte la solución a todos.

Puede intentar MinGW-TDM (Principal: http://tdm-gcc.tdragon.net/ ) o MinGW-Ecuación (Descargar la página: http: //www.equation .com / servlet / equation.cmd? fa = FORTRAN ).

Instalar la versión de 32 bits a D:\MinGW\MinGW32 por ejemplo (y la versión de 64 bits a D: \ MinGW \ MinGW64 si desea utilizar 64 bits binarios de compilación)

Crear un archivo por lotes de la siguiente manera a continuación, dejar que funcione a su directorio de construcción:

Set MinGW_bin=D:\MinGW\MinGW32\bin
Set MSys_bin=D:\MinGW\msys\bin
Set Path=%MSys_bin%;%MinGW_bin%
mingw32-make SHELL=CMD.exe -j6 -f makefile

Puede descargar MSYS de http://sourceforge.net/apps/trac / MinGW-W64 / wiki / MSYS . Tiene muchas utilidades UNIX como la que se requiere la construcción de muchas bibliotecas de código abierto, aplicaciones.

Cuando -j6 es la opción de ejecutar los trabajos de compilación 6 paralelas.

TIP: puede establecer la opción -Jn donde N = Su número de CPU múltiples núcleos (hilos) por 1,5. En mi caso, mi CPU tiene 4 hilos de lo que establece este valor a 6.

Nota: puede ejecutar

  

make.exe -Jn -f Makefile

sin SHELL=CMD.exe y su recopilación se ejecuta en paralelo pero no es compatible en algunos casos (donde make.exe vuelto del directorio MSYS).

Saludos,

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top