2013-10-17 2 views
0

응용 프로그램을 빌드하는 데 많은 시간 (20-30 분)이 걸립니다.여러 메이크 파일을 실행하는 멀티 스레딩

약 5000 개 이상의 파일이 있으며 코드는 여러 가지 하위 시스템으로 나뉘며 독립적으로 구축 할 수 있습니다. 각 서브 시스템에는 자체 makefile이 있습니다.

내 질문은 : 모든 하위 시스템이 병렬로 빌드 된 후 각자 메이크 파일을 병합하여 모두 병합 할 수 있도록 각 메이크 파일에 대한 스레드를 만들 수 있습니까?

가능한 경우 진행 방법은 무엇입니까?

답변

7

make의 병렬 처리 기능을 사용할 수 있습니다. -j number으로하면 number 요리법을 동시에 실행할 수 있습니다.

자세한 내용은 here을 참조하십시오.

0

make -j을 사용하면 (TheMorph가 말한 것처럼) 확실히가는 길입니다.

그러나 단일 make 프로세스가 빌드 종속성을보고 병렬화 대상을 파악할 수있는 경우이 방법이 가장 효과적입니다. 재귀 Makefile 시스템이 있는데, 이는 considered harmful입니다 (경고 : 링크는 PDF 임).

다른 하위 시스템 간의 종속성을 최상위 레벨 make가 실제로 이해하지 못하기 때문에 일반적으로 재귀 적 make를 병렬로 실행하기가 어렵습니다.

그래서 가장 좋은 방법은 재귀 메이크 파일을 먼저 수정하는 것일 수도 있고 다음에은 을 최대한 활용할 수 있습니다.

This은 비 재귀 적 make 시스템을 작성하는 예입니다. 현재 메이크 파일을 가지고있는 모든 디렉토리에는 여전히 메이크 파일이 있으며 각 메이크 파일은 여전히 ​​동일한 대상을 관리하며 각 서브 디렉토리는 여전히 독립적으로 빌드 될 수 있습니다. 다른 점은 최상위 빌드가 모든 하위 디렉토리 makefile을 단일 종속성 그래프에 포함하므로 훨씬 더 적극적으로 parallize 할 수 있다는 것입니다.