Windows에서 GNU make parallel 작업 (-j)의 설정은 무엇입니까?Windows에서 만들기 (병렬 작업)
MinGW make 3.81을 사용하여 cmd.exe로 셸을 설정하려고했지만이 작업은 여러 프로세스를 만드는 데 사용되지만 "작업 대기 중"메시지와 함께 실패합니다.
이 기능과 최상의 설정은 무엇입니까? (MinGW/Cygwin/???) 누군가가 저에게 테스트 할 실제 예제를 가르쳐 주시겠습니까?
Windows에서 GNU make parallel 작업 (-j)의 설정은 무엇입니까?Windows에서 만들기 (병렬 작업)
MinGW make 3.81을 사용하여 cmd.exe로 셸을 설정하려고했지만이 작업은 여러 프로세스를 만드는 데 사용되지만 "작업 대기 중"메시지와 함께 실패합니다.
이 기능과 최상의 설정은 무엇입니까? (MinGW/Cygwin/???) 누군가가 저에게 테스트 할 실제 예제를 가르쳐 주시겠습니까?
나는 Cygwin에서 make -jn
을 사용하여 아무런 단서를 보지 못했습니다. 그것은 오히려 잘 작동합니다. 나는 정기적으로 마이크로 소프트의 cl.exe
컴파일러와 함께 사용한다. 그것은 단지 나를 위해 상자에서 작동합니다. 매우 유닉스처럼, 좋은 것 ™입니다. Linux 및 Mac에 스크립트를 잘 작성하십시오. 철저히 권장합니다.
5 개의 백 슬래시가 너무 적지 만 여섯 개가 너무 많아서 MinGW make가 마음에 들지 않았습니다. 한숨! (AFAIK을 만들 때 MinGW 해킹과 백 슬래시로 구분 된 경로 이름을 함께 사용하면됩니다.)
필자가 이해할 수있는 것처럼, GNU Make의 병렬 작업은 기본 플랫폼에 CPU로드 정보를 제공합니다. 불행히도 Windows와 호환되지 않는 방식으로 이루어지며 "make -j"명령 만이 스케일링 방식으로 수행됩니다. 그 명령 (최대 작업 수없이)은 치명적인 굶주리는 개 같은 기억을 먹을 수 있으므로 잠재적으로 꽤 위험합니다 (Qt에서 시도해 보았습니다. Qt에서 가장 큰 프로젝트 인 QtWebkit에서 충돌했습니다, 4GB RAM, Win7).
두 번째 생각에서 make -j3이 make보다 빠르게 실행된다는 느낌을 갖지만 웹 (포럼, 매뉴얼 ...)에서 찾을 수있는 것에 비추어 매우 POSIX/Linux의 특정 기능처럼 보입니다.
나는 당신의 질문에 대해 투표 결과에 놀랐습니다.
Windows에서 병렬 make 빌드의 문제점을 설명하는 this Danny Thorpe's blog entry이 발견되었습니다. 기본적으로 무엇을 제안하는 것이 먼저 다음과 같은 환경 변수를 설정하는 것입니다 : 그와
set SHELL=cmd.exe
, 나는 make -j
스타일 명령을 실행 할 수 있었다,하지만 불행히도 제어 make -jN
스타일의 명령.
이 문제를 해결하여 모든 사람에게 해결책을 제공합니다.
MinGW-TDM (홈 페이지 : http://tdm-gcc.tdragon.net/) 또는 MinGW-Equation (다운로드 페이지 : http://www.equation.com/servlet/equation.cmd?fa=fortran)을 사용해보십시오.
(D에 64 비트 버전 :는 MinGW \ MinGW64 \ 64 비트 컴파일 된 바이너리를 사용하고자하는 경우) 예를 들어 D:\MinGW\MinGW32
32 비트 버전을 설치
이 빌드에서 실행 한 후 다음과 같은 배치 파일을 만듭니다 디렉토리 :
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
http://sourceforge.net/apps/trac/mingw-w64/wiki/MSYS에서 MSYS를 다운로드 할 수 있습니다. 많은 오픈 소스 라이브러리, 응용 프로그램을 구축해야하는 유틸리티와 같은 많은 UNIX가 있습니다.
여기서 -j6은 6 개의 병렬 컴파일 작업을 실행하는 옵션입니다.
팁 : N = CPU 코어 수 (스레드)를 1.5 배 늘린 옵션 -jN을 설정할 수 있습니다. 내 경우에는 CPU에 4 개의 스레드가 있으므로이 값을 6으로 설정합니다.
참고 : 실행할 수
make.exe -jN -f 메이크
SHELL=CMD.exe
옵션없이 귀하의 컴파일 (여기서 make.exe
를 병렬로 실행되지만, 경우에 호환되지 않습니다 MSYS 디렉토리에서 왔습니다).
감사합니다,
정상적으로 나타납니다. MinGW는 TDM뿐 아니라 TDM도 함께 제공됩니다. 마침내 100 % CPU를 사용하여 멈추지 않는 병렬 병렬 작업을 수행합니다. LOL – rogerdpack
cmake-메이크는 일반적으로처럼 메이크 호출 재귀 할 때 CMake 사용자가
-jN 옵션이 작동하지 않습니다 도움이 될 팁. 그러나 생성 된 makefile에서 CMake가 이러한 구문을 통해 호출하기 때문에 다시 작동하는 구제 방법이 있습니다.
$(MAKE) -f CMakeFiles\Makefile2 <subproject>
이것은 당신이 변수 MAKE을 수정할 수 있습니다 의미 :
mingw32-make "MAKE=mingw32-make -j3"
지금 하위 프로젝트-make가 시작될 때마다, 그것은 다시 "-j3"옵션을 가져옵니다. 그러나 이것은 실제로 병렬 컴파일 수를 3으로 제한하지 않는다는 점에 유의하십시오. 동일한 계층 구조에서 서로 의존하지 않는 프로젝트가 3 개 이상있는 경우 3 개의 프로젝트가 모두 병렬로 작성되고 각각 3 개의 컴파일 단계가 시작됩니다. 9 개의 병렬 컴파일 단계.
cmake가 생성 한 맨 위 Makefile을 자세히 살펴보면 대상 "all"은 본질적으로 sub make 만 시작한다는 것을 알 수 있습니다.
$(MAKE) -f CMakeFiles\Makefile2 all
그래서 우리는
mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all
를 호출하여 하위 프로젝트 병렬 처리의 한 층을 제거 할 수 있습니다하지만이보고 진행 상황을 희생.
그럼에도 불구하고 도움이되기를 바랍니다.
해결 방법으로 매우 효과적입니다. 감사합니다. 나는 cmake 사용자들에게 유용 할뿐만 아니라, ---- 재귀 적 make가 그렇게 특이한 것은 아니라고 확신한다. –
Urk! 이것은 큰 재귀 적 make 시스템에서해야 할 일처럼 들린다. _Every_ _make_ 호출은 3 개의 작업을 실행합니다 ('-j3'의 경우).총 수십 개의 동시 작업을 쉽게 실행할 수 있습니다! 적절한 병렬 make는 모든 인스턴스에서 최대 3 개의 작업 (이 경우)을 유지하기 위해 모든 _make_ 인스턴스가 서로 통신 할 것을 요구합니다. 영리한. – bobbogo
귀하의 권리. 당신이 설명하는대로 작동하도록했습니다 - 나는 단지 -j (전화 걸기를 make make ...) 할 적절한 지점을 찾기 위해 끔찍한 makefile을 풀어야했습니다. – Oliver
cygwin/MinGW 쉘을 사용하는 경우 :'shell' 시스템 변수를'cmd'로 설정하는 것을 잊지 마십시오 (그렇지 않으면 sh 또는 sh.exe가 기본적으로 cygwin에서 사용됩니다 ...) 다중 프로세스 실행을 지원할 수 있어야합니다.) 'SHELL = CMD' 만 내보내십시오. 쉬운. –
@Karako Noooo, 제발 그만해. 'sh'가 작동합니다. 그것은 크로스 플랫폼입니다. 병렬 처리 문제가 없습니다. (_cygwin_ 어쨌든 _mingw_을 보증 할 수 없습니다.)'cmd'는 끔찍합니다. – bobbogo