2011-07-26 6 views
6

¿Hay alguna forma de reducir drásticamente la cantidad de archivos de encabezado necesarios para impulsar? Idealmente, les pido a los amigos de Boost que encuentren una forma de reducir sus productos. Pero, mientras tanto, ¿hay alguna manera de incluir el impulso, pero no tener varios miles de archivos de cabecera para tratar?Tratando con los archivos de encabezado de Boost

¿Hay un mecanismo de C++ para "agrupar" miles de archivos de encabezado en un solo "paquete" y simplemente verificar ese único archivo en el control de código fuente?

Supongo que el problema aquí es el control de fuente. Hacer un diff, svn st y check out es muy lento con todos estos archivos para tratar.

+3

Solo el primer check in/out es lento, ¿correcto? Dudo que esté haciendo cambios significativos en los encabezados de impulso, por lo que una vez que se descarguen en el primer pago, los registros subsiguientes no necesitan versiones actualizadas. Esto supone que su mecanismo de control de fuente es relativamente sensato. – Chad

+2

Además de lo que dijo Chad, tiendo a no controlar las bibliotecas de terceros en el control de la fuente, a menos que esté planeando modificar el código yo mismo. En su lugar, simplemente archive la biblioteca e incluya instrucciones de compilación en su proyecto sobre cómo hacer para compilar. – Praetorian

+0

¿Qué quiere decir con "tratar con"? Descubrí que usar archivos de encabezado precompilados puede ser un verdadero salvavidas, acelerando una pequeña compilación de programas de más de 10 segundos a una fracción de segundo cuando se usa Boost.GIL. –

Respuesta

9

Boost ofrece una herramienta llamada BCP. BCP le permite extraer subconjuntos de impulso. También puede analizar su árbol fuente y extraer solo los componentes de Boost que utiliza su árbol fuente.

2

Recomendaría poner sus bibliotecas de terceros en un repositorio separado. Boost es una plantilla pesada, por lo que hay una buena razón para que no agrupen sus encabezados. Intentar incluir encabezados de impulso agrupados movería su tiempo "desperdiciado" del control de versiones a sus tiempos de compilación. Eso realmente no escala. Me negaría a usar boost si intentas hacer eso con mis encabezados de boost.

Ha hecho preguntas similares anteriormente, y creo que aún no estoy seguro de las restricciones técnicas que está tratando de evitar.

0

No hay forma de empaquetar todo en un solo archivo (excepto la versión de un archivo, pero no es una gran práctica ni práctica en absoluto). En una nota lateral, se sabe que Subversion es lento en la comprobación de miles de archivos pequeños, como los encabezados de impulso, por lo que tal vez pueda considerar cambiar a un SCM más eficiente como Git.

Le interesará bcp, una herramienta de Boost que analiza su fuente y copia en un directorio separado los encabezados de Boost que usa. Esto ayudó mucho a reducir los archivos de terceros, y fue más que nada correcto en mi caso (solo tuve que agregar algunos a la lista).

0

No es lo que pediste, pero esta es una manera de solucionar tu problema. Según lo entiendo, está agregando los archivos de Boost a su repositorio de control de código. ¿Por qué? No son parte de su proyecto per se, no están bajo su control .

Así es como estructurar mis proyectos de modo que no me encuentre con ese tipo de problema. Todo se agrega al control de origen, excepto que las carpetas incluyen y lib, como se menciona a continuación. (Que sólo muestran las partes pertinentes de mi árbol de directorios.)

  • /
    • src — incluye mis propios archivos de origen y las cabeceras
    • ext — dependencias externas (como impulso)
      • impulso -1-46-1
        • Descargar.txt — incluye enlace donde se puede descargar la versión correcta de
        • incluyen — esto no se añade al control de código fuente
        • lib — esto no
+0

"¿Por qué? No son parte de su proyecto per se, no están bajo su control". Hay varias razones para hacerlo. Puse proyectos externos bajo control de versiones para facilitar la distribución a otras máquinas (solo para obtener y obtener lo que necesita). También asegura que si accidentalmente cambio alguno de los archivos, puedo deshacer esos cambios. Y, por supuesto, si necesito corregir un error, ya está bajo control de versión. –

+3

Asegurarse de que todos los desarrolladores estén en la misma versión de bibliotecas de terceros es una pesadilla si no pone cosas en control de revisiones. –

+0

@Tom & Nicol: admito que nunca trabajé con un equipo y la respuesta se escribió desde esa perspectiva. Aún así, ¿no sería mejor tener dos repositorios: uno para su código y otro para las libs de terceros? –

1

ccache puede ser una salvavidas para acelerar las compilaciones pesadas del preprocesador.

Cuestiones relacionadas