2010-12-03 9 views
13

Estoy construyendo un par de archivos C++ en xcode que requieren mucha memoria para compilar (+1 GB/archivo). Como hago esto en mi computadora portátil dual core, xcode usa 2 hilos para construir. Con el tiempo, los dos hilos crearán los archivos que requieren mucha memoria al mismo tiempo, por lo que el sistema sufrirá una falta de memoria y la compilación se detendrá casi por completo.¿Cómo cambiar la cantidad de subprocesos de construcción en Xcode?

Una solución suficiente para mí sería forzar a Xcode a usar solo un hilo de compilación. ¿Alguien sabe una forma de cambiar cuántos hilos de construcción usa Xcode?

Para aquellos que estén interesados, los archivos C++ contienen un impulso considerable :: spirit :: qi parser.

Respuesta

12

El número de subprocesos que Xcode está utilizando para realizar tareas está controlado por la opción PBXNumberOfParallelBuildSubtasks. Puede cambiarlo con el siguiente comando: - defaults write com.apple.Xcode <key> <value>. Por ejemplo:

defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8 

Consulte Xcode User Defaults para obtener más detalles.

También hay muchas otras maneras de acelerar una compilación, desde encabezados precompilados hasta compilaciones distribuidas. Lea Reducing Build Times para obtener más información sobre esto.

¡Buena suerte!

+0

Esto es exactamente lo que estaba buscando, muchas gracias. También la parte sobre reducir los tiempos de construcción es una lectura interesante. –

+5

Los enlaces ya no funcionan – Remover

+0

Pruebe esto por defecto escriba com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks '' sysctl -n hw.ncpu'' – Maximelc

0

Una sola tarea de compilación nunca debe hacer el mismo trabajo dos veces, ¡y ciertamente no simultáneamente! Factorice la gran cantidad de código común en una biblioteca estática para que pueda ser recompilado solo cuando cambie. Establezca una dependencia de destino en su aplicación en la biblioteca estática y enlace en el producto de biblioteca estática. Los cambios en el resto de su aplicación ya no requerirán la reconstrucción de la biblioteca estática, lo que acelerará enormemente los tiempos de construcción.

Trate de agotar todas las soluciones a nivel de proyecto antes de manipular Xcode como un todo. Es demasiado fácil paralizar a Xcode para que use solo un hilo y olvide cambiarlo cuando pase a un nuevo proyecto. Los Xcode User Default Reference documentos muchas opciones que no están expuestos a través de la interfaz de preferencias, incluyendo:

  • PBXNumberOfParallelBuildSubtasks (entero positivo)

    Esto le permite limitar Xcode a usar sólo n hilos de construcción en cada proyecto que compila.

  • BuildSystemCacheSizeInMegabytes (número entero positivo, por defecto 1024)

  • BuildSystemCacheMinimumRemovalAgeInHours (número entero positivo, por defecto 24)

    Subiendo el tamaño de caché y el tiempo de retención PCH podría ayudar a acelerar su construye.

+0

No es el mismo trabajo, en realidad son varios archivos con un gran uso de la memoria de compilación . Los mismos archivos también se crean dos veces porque Xcode crea versiones de 64 bits y de 32 bits y luego las fusiona. Una lib estática no me ayudará mucho ya que actualmente estoy trabajando en esos archivos. Gracias por su respuesta, PBXNumberOfParallelBuildSubtasks es exactamente lo que necesitaba. Una solución más permanente sería agregar algo de RAM a mi PC, no me di cuenta de que las tareas de compilación podrían llevar tanta memoria. –

4

Para Xcode 4 debe establecer el valor predeterminado IDEBuildOperationMaxNumberOfConcurrentCompileTasks usuario, por ejemplo:

defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 4 

Nota del "DT". Esto no afectará xcodebuild en la línea de comando.Para hacer eso, usar algo como

xcodebuild -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4 ... 

(Ver http://lists.apple.com/archives/xcode-users/2011/Apr/msg00403.html y http://lists.apple.com/archives/xcode-users/2011/Jul//msg00377.html)

+1

Esto parece que ya no funciona con Xcode 7, ¿alguna idea de cómo especificar el número de trabajos ahora? –

8

Con XCode 5, puede utilizar -parallelizeTargets y -jobs NUMBER con xcodebuild. De acuerdo con xcodebuild --help:

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

-jobs 8 ayuda, gracias. – BillHoo

Cuestiones relacionadas