2012-05-12 2 views
29

인수를 사용하여 빌드 프로세스의 스레드 수를 설정할 수 있습니다. 예를 들어, 4 코어 +4 가상 있습니다. 쓰기 : make -j8 속도가 4 배 증가합니다.Parallel make : 기본 옵션으로 -j8을 설정하십시오.

해당 값을 기본값으로 설정할 수 있습니까? 예를 들어, Linux Gentoo의 설정 파일에서이 기본값을 설정할 수 있습니다.

p.s. 나는 아치 리눅스에게이 도움이

+1

이것은 GCC보다 메이크업 질문에 가깝습니다. – Pubby

+0

그래서 기본 C++ make 옵션은 '가능한 것보다 4 배 느리게 실행'됩니까? 이상한 결정! –

+1

@MartinJames Parallel make에는 많은 결함이 있으므로 잘못된 기본값이됩니다. – Pubby

답변

30

귀하의 질문은 스레드에 관한 것이 아니라 make에 의해 실행되는 프로세스 (작업)에 관한 것입니다. 메이크업은 콘솔에서 사용되는

이를 설정하는 간단한, 방법은 추가된다

alias make="/usr/bin/make -j 8" 

당신의 .profile 파일에.

는 또한 setenv MAKEFLAGS '-j 8'를 사용할 수 있지만 프로세스의 원하는 번호를 유지하는 것은 재귀 make 전화와 통신이 필요하기 때문에 MAKEFLAGS, 일부 시나리오에서이 매개 변수를 무시할 수 있습니다. 행복하게이 방법 works with current versions of GNU Make. 여기

+6

"재귀 적 make"에 대한 언급은 멈추지 않고, 다시 한번 http://aegis.sourceforge.net/auug97.pdf를 가리키고 싶습니다. 게다가, make 파일은 심지어 허용하도록 잘 작성되어야합니다. 병렬 제조용. 종종 자동화 된 방법은 실제 종속성을 무시하고 대상이 여러 번 작성되도록합니다. – 0xC0000022L

+0

향후 링크가 작동하지 않을 경우 "재귀 적으로 유해한 것으로 간주됩니다"라는 제목이 붙어 있으며 충분히 쉽게 작성되어야합니다 찾다. 그것은 읽을만한 가치가 있습니다. – SystemParadox

+0

'setenv'는 무엇입니까? csh 내장? – alecov

25

에서는 setenv MAKEFLAGS '-j8'

희망이있다!

5

내가 그것을 한 적이 방법 : 나는 기본적으로 _all "개인"내 기본 대상 all을 "별칭"한

CORES ?= $(shell sysctl -n hw.ncpu || echo 1) 

all:; @$(MAKE) _all -j$(CORES) 
_all: install lint test 
.PHONY: all _all 
… 

. 코어 수를 계산하는 명령은 AFAIK에 특화된 OSX이기 때문에 가능한 경우 더 많은 크로스 플랫폼이되도록 향상시킬 수 있습니다. ?= 할당 때문에 필요한 경우 변수를 env 변수로 재정의 할 수 있습니다.

편집 :

또한과 같이, 메이크 자체 내에서 MAKEFLAGS에 추가 할 수 있습니다

CPUS ?= $(shell sysctl -n hw.ncpu || echo 1) 
MAKEFLAGS += --jobs=$(CPUS) 
… 
+1

이것은 다른 솔루션보다 훨씬 뛰어나다. Makefile별로 이것을 수정할 수 있기 때문이다. –

+0

MAKEFLAGS는이 방법으로 변경할 수 없습니다. 사용해보기 : https://gist.github.com/sanmai/dcc31ae20afa6e8ba4721f174fe05fd9 – sanmai