2009-05-11 11 views
26

Desde que comencé en una nueva compañía me he dado cuenta de que usan archivos unity cpp para la mayoría de nuestra solución, y me preguntaba si alguien puede darme una razón definitiva sobre por qué y cómo estos aceleran el proceso de compilación. ? Pensé que la edición de un archivo cpp en los archivos de unidad obligará a la compilación de todos ellos.¿Los beneficios/desventajas de las construcciones de unidades?

+4

Tenga en cuenta que una construcción unitaria cambia la semántica, ya que hay muchas cosas que dependen de los límites de una unidad de traducción. –

Respuesta

26

de preguntas y respuestas buenas muy similar aquí: #include all .cpp files into a single compilation unit?

El resumen parece ser que menos sobrecarga de E/S es el mayor beneficio.

Véase también The Magic Of Unity Builds como se relacionan en la pregunta anterior también.

+0

excelente respuesta, muchas gracias por su ayuda, después de leer esos enlaces todavía no soy más prudente si edito archivos dentro de la unidad cpp forzar una compilación completa de la fuente completa, ¿alguna idea al respecto? – Stowelly

+0

Sí, lo haría. Si eso es algo malo o no depende de la frecuencia con la que debes hacer una reconstrucción completa. –

+2

Si un archivo cambia, cualquier sistema de compilación decente notaría una dependencia modificada y recompilaría el lote. Es posible que pueda mitigar parte de ese tiempo con un caché de compilación como el excelente ccache; consulte http://ccache.samba.org/ – akent

6

Lee Winder publicado sus experiencias con la Unidad construccion - The Evils of Unity Builds

Su conclusión es:

Unidad construye. No me gustan.

+0

Artículo muy útil. Recientemente me he dado cuenta de que realizar varios cambios en varios proyectos dentro de la solución puede tardar hasta media hora en compilarse (incluso con incredibuild), pero la solución de limpieza y la creación desde cero demoran unos 5 minutos, por lo que es definitivamente muy válido puntos allí! – Stowelly

+1

El enlace ahora se puede encontrar [aquí] (http://engineering-game-dev.com/2009/12/15/the-evils-of-unity-builds/). – imallett

+0

@imallett El enlace está roto también. – glauxosdever

2

Esto se debe a que ahorra trabajo redundante. Análisis y compilación redundantes para dependencias. La vinculación también es mucho más compleja: tiene sus exportaciones en un solo objeto (o algunas), o son exportaciones redundantes separadas en la mayoría de los archivos objeto del objetivo. Menos objetos producen menos E/S y tiempos de enlace reducidos. Dependiendo de su configuración, la inclusión podría ser un problema: en el sistema de "compilación unitaria" que uso, la compilación es, en última instancia, unida a la CPU y/o la memoria.

Cuestiones relacionadas