2010-08-31 15 views
11

Contribuyo a un decent-sized C++ project con una serie de dependencias. El problema es que el proyecto contiene la fuente de todas sus dependencias (por ejemplo, pcre, zlib, etc.). Quiero recortar el proyecto a solo lo que es relevante para el programa en sí. ¿Existe alguna forma relativamente estándar de compilar estas bibliotecas y colocarlas en algún lugar, y tener sus archivos de encabezado también de fácil acceso?¿Dónde debería colocar bibliotecas de terceros?

Por lo que vale, estoy usando Windows 7, y estoy desarrollando usando VS2005. También soy un completo novato con el trabajo en grandes proyectos de C++ en Windows; Realmente nunca tuve que salir de la biblioteca estándar y win32.

+4

Este comentario no será tan útil, así que no lo daré como respuesta. Linux/etc tiene esto más resuelto. Hay src, lib, bin, include y otros nombres de directorio estándar. Cuando escribe una biblioteca en Windows, coloca los encabezados de su biblioteca, fuente, etc. donde le apetezca colocarlos, y espera que el mundo se ajuste a usted. Algunas de las bibliotecas que mencionas están disponibles bajo Linux, así que probablemente uses el esquema de directorio estándar –

+0

Hmm ...Ese es un buen punto. Me imagino que las librerías compiladas van en lib y/o bin (dependiendo de DLL/LIB-ness), y el código de la aplicación va en src? Me gusta eso. – Twisol

+3

@Merlyn: Me parece gracioso que Linux tenga lugares estándar para colocar bibliotecas C e incluir archivos, pero no un lugar estándar donde * binarios * estén almacenados. Gah! +1 para comentar. –

Respuesta

7

Una estructura que usamos en mi lugar de trabajo está teniendo una carpeta "externo" que contiene una carpeta y una "Incluir" "liberación" de los encabezados y Liberaciones externos. Sin embargo, como también usamos VS, tratamos de usar su función "Dependencias" lo más posible, eliminando las entradas manuales al vinculador. Eso significa que solo los proyectos que no están bajo la misma solución van a la carpeta "Externa". Además, como tenemos algunas bibliotecas de terceros específicas para algunos proyectos, creamos carpetas dentro de la carpeta del proyecto para estos includes y libs. Así es como se obtiene:

 
.\ 
|-Project1\ --> contains Project1.vcproj 
|-Project2\ --> contains Project2.vcproj 
| |-Third-Party\ 
| |-Include\ 
| |-Lib\ 
|-External\ 
| |-Include\ 
| |-Lib\ 
|-InternalLibrary\ --> contains InternalLibrary.vcproj 
|-Solution.sln --> includes the vcproj's and link them as necessary by its dependencies 

No puedo decir si esto es la mejor estructura nunca, pero todo está bajo control de código fuente, podemos hacer la noche se basa simplemente mediante la construcción de la solución, y el desarrollo pasa por la construcción de una sola proyectos.

1

Hay una falacia en su afirmación: "Quiero recortar el proyecto a solo lo que es relevante para el programa en sí".

Créanme, las dependencias son extremadamente relevantes para el programa. Si no tiene estos en el control de la fuente, encontrará un sinfín de problemas al presentar a los nuevos miembros del equipo o al cambiar a una nueva estación de trabajo.

Incluso si compila las bibliotecas "no relevantes", estas bibliotecas compiladas deberían ir a su repositorio de origen.

+0

Muy bien ... Debería haber dicho "código específico de la aplicación". Sin embargo entiendo lo que quieres decir. Pero, ¿cuál es la mejor manera de estructurar esto? En este momento, todo está en un solo proyecto. ¿Debería dividirlo en proyectos separados bajo la única solución, o hay una mejor manera? Honestamente, no tengo ni idea de cuáles son las mejores prácticas aquí, y no pude encontrar nada con Google. – Twisol

+1

No estoy totalmente de acuerdo con esto. Una instalación de Boost, una vez que se compilan los externos, es de aproximadamente 5 GB (10 GB si tiene que admitir VS2010 y VS2008). No es razonable tenerlo bajo el control de la fuente. –

0

grupos que he visto hacer lo siguiente:

  • código interno independiente del código externo (código hicieron frente a empresas externas)
  • independiente de su código de código de la biblioteca
  • independiente cada programa y cada biblioteca
  • Compruebe en una versión compilada de sus dependencias, por lo que no forma parte de su ciclo completo de compilación (al menos, no en algunas ramas. Otras ramas pueden hacer una compilación más completa)

Los proyectos existían para cada exe o biblioteca, en el directorio con el exe/library.

Las soluciones existían donde los equipos consideraban que sería beneficioso, y los binarios a menudo estaban vinculados, en lugar de sus proyectos incluidos en las sub-soluciones. Solo se garantizó una construcción completa para no romper con un nuevo alistamiento.

caveat.emptor ...

Cuestiones relacionadas