2010-12-03 4 views
13

저는 xcode에 두 개의 C++ 파일을 만들어서 컴파일하는 데 많은 메모리를 사용합니다 (+1GB/파일). 듀얼 코어 노트북에서이 작업을 수행하기 때문에 xcode는 건물에 2 개의 스레드를 사용합니다. 두 스레드는 결국 많은 양의 메모리를 동시에 차지하는 파일을 작성하므로 시스템에서 메모리 기아가 발생하고 컴파일이 거의 멈추게됩니다.Xcode에서 건물 스레드의 양을 변경하는 방법은 무엇입니까?

나에게 충분한 해결책은 Xcode가 빌드 스레드를 하나만 사용하도록하는 것입니다. 아무도 Xcode가 사용하는 스레드를 얼마나 많이 만들지 변경할 방법을 알고 있습니까?

흥미가있는 사람들을 위해 C++ 파일에는 상당한 boost :: spirit :: qi 파서가 들어 있습니다.

답변

12

Xcode가 작업을 수행하는 데 사용하는 스레드 수는 PBXNumberOfParallelBuildSubtasks 옵션으로 제어됩니다. 다음 명령을 사용하여 변경할 수 있습니다. - defaults write com.apple.Xcode <key> <value>. 예 :

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8 

자세한 내용은 Xcode User Defaults을 참조하십시오.

미리 컴파일 된 헤더에서부터 분산 된 빌드에 이르기까지 컴파일 속도를 높이는 여러 가지 방법이 있습니다. 자세한 내용은 Reducing Build Times을 참조하십시오.

행운을 빈다.

+0

, 대단히 감사합니다. 또한 빌드 시간을 줄이는 부분은 흥미로운 내용입니다. –

+5

링크가 더 이상 작동하지 않습니다 – Remover

+0

이 하나의 기본값을 사용해보십시오 com.apple.dt.Xcode를 작성하십시오 IDEBuildOperationMaxNumberOfConcurrentCompileTasks''sysctl -n hw.ncpu'' – Maximelc

0

단일 빌드 작업은 동일한 작업을 두 번 수행해서는 안되며 동시에 확실히 수행하지 않아야합니다! 공용 코드를 방대한 라이브러리에서 정적 라이브러리로 분해하여 변경 될 때만 다시 컴파일 할 수 있습니다. 정적 라이브러리 제품에서 응용 프로그램의 대상 종속성을 정적 라이브러리 및 링크에 설정하십시오. 나머지 응용 프로그램을 변경하면 더 이상 정적 라이브러리를 다시 빌드 할 필요가 없으므로 빌드 시간이 엄청나게 빨라집니다.

전체적으로 Xcode를 조작하기 전에 모든 프로젝트 수준 솔루션을 고갈 시키십시오. Xcode가 단 하나의 스레드 만 사용하는 것은 너무 쉽습니다. 새 프로젝트로 넘어갈 때 다시 변경하는 것을 잊지 마십시오. 를 포함한 환경 설정 인터페이스를 통해 노출되지 않은 Xcode User Default Reference 문서 많은 옵션 :

  • PBXNumberOfParallelBuildSubtasks (양의 정수)

    이것은 당신이 모든에만 N 빌드 스레드를 사용하여 엑스 코드를 제한 할 수 있습니다 프로젝트를 컴파일합니다.

  • BuildSystemCacheSizeInMegabytes (양의 정수, 기본값 1024)

  • BuildSystemCacheMinimumRemovalAgeInHours (양의 정수, 기본 24) 당신의 빌드 속도를 도울 수있는 PCH 캐시 크기 및 유지 시간이 흐름이 완만

    .

+0

이것은 실제로 똑같은 작업이 아니며 거대한 편집 메모리 사용량을 가진 여러 파일입니다 . Xcode는 64 비트와 32 비트 버전을 모두 빌드 한 다음 나중에 병합하기 때문에 동일한 파일도 두 번 빌드됩니다. 정적 인 lib는 현재 내가이 파일들에 대해 작업하고 있기 때문에 도움이되지 않습니다. 귀하의 답변 주셔서 감사하지만, PBXNumberOfParallelBuildSubtasks 정확히 내가 무엇을 필요합니다. 좀 더 영구적 인 해결책은 PC에 RAM을 추가하는 것이지만 컴파일 작업으로 인해 많은 메모리가 필요하다는 것을 깨닫지 못했습니다. –

4

엑스 코드 4의 경우 예를 들어, IDEBuildOperationMaxNumberOfConcurrentCompileTasks 사용자 기본 설정해야합니다

defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 4 

참고 "DT"를. 명령 행의 xcodebuild에는 영향을 미치지 않습니다.그렇게하려면, 엑스 코드 5

xcodebuild -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4 ... 

같은 (http://lists.apple.com/archives/xcode-users/2011/Apr/msg00403.htmlhttp://lists.apple.com/archives/xcode-users/2011/Jul//msg00377.html 참조)

+1

Xcode 7에서는 더 이상 작동하지 않는 것으로 보입니다 - 아이디어 수는 현재 작업 수를 지정하는 방법입니까? –

8

를 사용하여, 당신은 xcodebuild-parallelizeTargets-jobs NUMBER를 사용할 수 있습니다. xcodebuild --help에 따르면 이것은 내가 찾던 정확히 무엇

-parallelizeTargets  build independent targets in parallel 
-jobs NUMBER   specify the maximum number of concurrent build operations 
+0

- 직업 8 도움, thx. – BillHoo

관련 문제