Compilación en origen versus compilación fuera de fuente

10

En mi desarrollo (principalmente C ++), me he adherido al uso de compilaciones fuera de la fuente. Es decir, mi fuente por lo general se encuentra en un /project/srcdirectorio y la acumula en vivo en una /project/build/bin/release, /project/build/bin/debugdirectorios. He hecho esto porque mantiene mis directorios de origen limpios de archivos intermedios, tengo una ubicación para todos mis archivos binarios, el empaquetado es más fácil, la limpieza es más fácil y el control de versiones es más fácil. (¿Yo me perdí algo?)

Estoy heredando un proyecto (grande) ahora que usa compilaciones en la fuente. ¿Cuál es la motivación para este tipo de estructura y cuáles son sus ventajas? (Me preocupan más las razones de nivel de ingeniería frente a los tipos de razones de preferencia personal).

Esperaba que el "Diseño de software C ++ a gran escala" de Lakos lo hubiera influido, pero lo extrañaría si lo hiciera.

DiB
fuente
2
Disculpas Estoy buscando "Las compilaciones en código fuente mejoran 'x'" o "ayudan a garantizar 'y'" o "las pruebas automatizadas pueden entonces 'z'". No es una queja. ¡Específicamente no quiero entrar en una guerra de opiniones aquí!
DiB
10
Las compilaciones en la fuente son una maldición que debes a la pereza de tu predecesor. Son horribles para casi todo (control de fuente, construcción cruzada, búsqueda de texto, etc.) pero son increíblemente fáciles de crear usando makefiles simples. Lo siento, esto fue una diatriba. Pero uno objetivo .
1
¿Qué quiere decir exactamente con compilaciones "in-source"? ¿Algo así /project/src/bin/release, o realmente todos los archivos intermedios y de salida /project/src? Este último puede ser realmente un desastre si hay más de una docena de archivos fuente, el primero está bien.
Doc Brown
2
@Tibo, no solo es increíblemente fácil con los makefiles, sino que también parece ser el predeterminado con la mayoría de los IDE (al menos cuando lo revisé hace unos años).
Bart van Ingen Schenau
44
@BartvanIngenSchenau ¿En serio? ¿Qué IDE has estado usando en este caso? Qt no hace esto, de hecho parece poner la compilación lo más lejos posible de la fuente, Eclipse no hace esto, podría argumentar que Clion hace esto, pero solo como consecuencia de main.cpp inicialmente estando en el nivel superior de su proyecto, todavía crea un directorio de compilación de cmake separado de su fuente en ese nivel superior. Creo que MSVS es similar a Clion en este aspecto también.
cuando

Respuestas:

9

Después de preguntarle a la comunidad aquí y continuar mi búsqueda en línea, no he podido encontrar una justificación de ingeniería significativa para usar compilaciones en la fuente. (Hay muchos ejemplos de razones para evitarlos).

La única razón objetiva que he encontrado (como se mencionó en el comentario de @BartvanIngenSchenau) es que las compilaciones en la fuente a veces son predeterminadas por un sistema de compilación. Debido a este valor predeterminado, no requieren sobrecarga en el tiempo de configuración, lo que puede ser perfectamente aceptable para un proyecto muy pequeño (o desde cero).

DiB
fuente