Как изменить количество строковых потоков в Xcode?
Я создаю пару файлов на С++ в xcode, которые занимают много памяти для компиляции (+1 ГБ/файл). Поскольку я делаю это на своем двухъядерном ноутбуке, xcode использует 2 потока для построения. Эти два потока в конечном итоге будут создавать файлы, которые занимают много памяти одновременно, поэтому система страдает от голода в памяти, а компиляция превращается в почти остановку.
Достаточным решением для меня было бы заставить Xcode использовать только один поток сборки. Кто-нибудь знает способ изменить, сколько использует потоки сборки Xcode?
Для тех, кто интересуется, файлы С++ содержат значимый парсер boost:: spirit:: qi.
Ответы
Ответ 1
Количество потоков Xcode, используемых для выполнения задач, контролируется опцией PBXNumberOfParallelBuildSubtasks
. Вы можете изменить его с помощью следующей команды: - defaults write com.apple.Xcode <key> <value>
. Например:
defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8
Подробнее см. Пользовательские настройки Xcode.
Существует также множество других способов ускорить компиляцию: от предварительно скомпилированных заголовков до распределенных сборок. Подробнее читайте Сокращение времени сборки.
Удачи!
Ответ 2
С XCode 5 вы можете использовать -parallelizeTargets
и -jobs NUMBER
с помощью xcodebuild
. Согласно xcodebuild --help
:
-parallelizeTargets build independent targets in parallel
-jobs NUMBER specify the maximum number of concurrent build operations
Ответ 3
Для Xcode 4 вы должны установить для пользователя IDEBuildOperationMaxNumberOfConcurrentCompileTasks значение по умолчанию, например:
defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 4
Обратите внимание на "dt". Это не повлияет на xcodebuild в командной строке. Чтобы сделать это, используйте что-то вроде
xcodebuild -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4 ...
(см. http://lists.apple.com/archives/xcode-users/2011/Apr/msg00403.html и http://lists.apple.com/archives/xcode-users/2011/Jul//msg00377.html)
Ответ 4
Одна задача сборки никогда не должна выполнять одну и ту же работу дважды, и, конечно же, не одновременно! Извлеките массивный кусок общего кода в статическую библиотеку, чтобы он мог перекомпилироваться только тогда, когда он изменяется. Установите целевую зависимость в приложении в статической библиотеке и ссылку в статическом библиотечном продукте. Изменения в остальной части вашего приложения больше не потребуют восстановления статической библиотеки, что должно значительно ускорить время сборки.
Попробуйте исчерпать все решения на уровне проекта, прежде чем управлять Xcode в целом. Слишком легко нанести Xcode на использование только одного потока и забыть изменить его при переходе к новому проекту. Xcode User Default Reference содержит много параметров, которые не отображаются через интерфейс настроек, в том числе:
-
PBXNumberOfParallelBuildSubtasks (положительное целое число)
Это позволяет вам ограничить использование Xcode только n потоками сборки для каждого компилируемого проекта.
-
BuildSystemCacheSizeInMegabytes (положительное целое число, по умолчанию 1024)
-
BuildSystemCacheMinimumRemovalAgeInHours (положительное целое, по умолчанию 24)
Увеличение размера кеша PCH и времени хранения может помочь ускорить ваши сборки.