Pergunta

Que configuração funciona para GNU Faça trabalhos paralelos (-j) no Windows?

Eu tentei definir o shell como cmd.exe usando o Mingw Make 3.81, isso funciona na criação dos múltiplos processos, mas faz com que falhe com a mensagem "Waiting for Job".

Isso pode funcionar e qual é a melhor configuração? (Mingw / cygwin / ???) Alguém pode me indicar um exemplo de trabalho para testar?

Foi útil?

Solução

Eu nunca tive nenhum promatível usando make -jn Sob Cygwin. Funciona muito bem. Eu usei regularmente com a Microsoft's cl.exe compilador. Apenas funciona fora da caixa para mim. Muito Unix Like, o que é uma coisa boa ™. Crie scripts por porta bem para o Linux e o Mac. Completamente recomendado.

Nunca gostei de Mingw Make desde que cheguei a um lugar onde 5 back-slashes eram muito poucas, mas seis eram demais. Suspirar! (A ver com os hacks Mingw para tornar os nomes dos caminhos separados por barragem permitidos em Make Afaik.)

Outras dicas

Até onde eu posso entender, os trabalhos paralelos da GNU Make dependem da plataforma subjacente para fornecer informações de carga de CPU). Infelizmente, isso é feito de uma maneira não compatível com as janelas, e apenas o comando "make -j" faz qualquer coisa em escala. Esse comando (sem o número máximo de empregos) é potencialmente bastante perigoso, pois comerá memória como um cachorro faminto de fome (eu tentei no QT e caiu no Qtwebkit, o maior projeto do QT, 4 GB de RAM, Win7).

Pensando bem, sinto o sentimento de fazer -j3 corre mais rápido que o fabricação, mas à luz do que posso encontrar na web (fóruns, manual ...), parece muito funcionalidade específica de Posix/Linux.

BTW, estou surpreso que sua pergunta tenha sido votada.

Uma dica que pode ajudar os usuários do cmake

A opção -jn não funciona quando uma chamada makefile faz recursivamente como o cmake -makefiles normalmente faz. Mas há um remédio que funciona novamente porque nas chamadas de cmake de makefiles geradas por meio de tal sintaxe.

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

Isso significa que você pode modificar a marca variável:

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

Agora, toda vez que uma make de subprojeto é iniciada, ele recebe novamente a opção "-j3". Mas observe que isso efetivamente não limita o número de compilações paralelas a 3, como você pode esperar. Se você tiver mais de três projetos que não dependem um do outro da mesma hierarquia, todos os três projetos criarão paralelo e cada um deles lançará 3 etapas de compilação. Resultando em 9 etapas paralelas de compilação.

Quando damos outra olhada no topo do Makefile gerado pelo CMake, vemos que o alvo "tudo" essencialmente inicia apenas uma subestimação.

$(MAKE) -f CMakeFiles\Makefile2 all

Para que possamos remover uma camada de paralelismo de subprojeto chamando

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

Mas isso sacrifica os relatórios de progresso.

Espero que isso ajude, no entanto.

eu encontrei A entrada do blog deste Danny Thorpe Isso explica os problemas com paralelo, crie a construção no Windows. Basicamente, o que sugere é definir a seguinte variável de ambiente primeiro:

set SHELL=cmd.exe

Com isso, eu era capaz de executar o make -j Comando de estilo, mas infelizmente não o controlado make -jN Comando de estilo.

Eu resolvi esse problema, então compartilhei a solução para todos.

Você pode tentar Mingw-Tdm (página inicial: http://tdm-gcc.tdragon.net/) ou Mingw-Equation (página de download: http://www.equation.com/servlet/equation.cmd?fa=fortran).

Instale a versão de 32 bits para D:\MinGW\MinGW32 por exemplo (e versão de 64 bits para d: mingw mingw64 se você deseja usar binários de compilação de 64 bits)

Crie um arquivo em lote conforme seguinte, execute -o no seu diretório de construção:

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

Você pode baixar msys de http://sourceforge.net/apps/trac/mingww-w64/wiki/msys. Possui muitos utilitários do UNIX, que exigiam a criação de muitas bibliotecas de código aberto, aplicativos.

Onde -j6 é a opção de executar 6 trabalhos de compilação paralela.

Dica: você pode definir a opção -jn onde n = seus números de núcleos da CPU (threads) múltiplos por 1.5. No meu caso, minha CPU possui 4 threads, então eu defino esse valor para 6.

Nota: você pode correr

make.exe -jn -f makefile

sem SHELL=CMD.exe opção e sua compilação é executada paralela, mas não é compatível em alguns casos (onde make.exe vem do diretório msys).

Cumprimentos,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top