Estructura del proyecto C ++ bajo Visual Studio 2008
Pregunta
Entonces, he estado haciendo Java durante varios años, pero ahora estoy comenzando un proyecto en C ++. Estoy tratando de determinar las mejores prácticas para configurar dicho proyecto.
Dentro del proyecto, ¿cómo estructura generalmente su código? ¿Lo haces al estilo Java con carpetas de espacio de nombres y rompes tu fuente de esa manera? ¿Mantiene sus encabezados públicos en un directorio de inclusión para facilitar las referencias?
He visto ambas y otras formas mencionadas, pero ¿cuál es un buen método para un proyecto grande?
Además, ¿cómo maneja los recursos / carpetas en la estructura de su aplicación? Está muy bien que el proyecto final se instale con una carpeta log
para almacenar registros, tal vez una carpeta lib
para archivos de biblioteca, tal vez un data ??code > carpeta de datos, pero ¿cómo gestionas esos bits dentro del proyecto? ¿Hay alguna manera de definir eso para que cuando construya la solución construya la estructura por usted? ¿O simplemente tiene que ir a las carpetas de configuración integradas (depuración, lanzamiento, etc.) y construir la estructura de archivos manualmente, asegurando así que las rutas que espera encontrar su archivo EXE estén posicionadas correctamente?
Solución
Tendemos a hacer de cada componente una solución, que contenga uno o más proyectos (o subcomponentes) y un proyecto de prueba. El proyecto de prueba contiene todas las pruebas unitarias.
Luego organizamos las soluciones en un árbol basado en módulos y componentes, por ejemplo:
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution
La solución contendrá varios proyectos de Visual Studio:
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/Something
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/SomethingElse
//depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/TestTheSolution
Puede haber más profundidad en el árbol, o menos, dependiendo de la cantidad de componentes / subcomponentes que haya. También tendemos a tener un "General" solución a nivel de subsistema y subcomponente con material reutilizable general.
Luego tenemos una solución de nivel de subsistema que une todo para construir el subsistema.
No utilizamos ni exportamos a " include " directorio. Dejamos que Visual Studio se cree y enlace dentro de nuestros sandboxes. Tenemos un '' Lanzamiento '' separado sandbox para garantizar que no vinculamos accidentalmente la biblioteca incorrecta.
Otros consejos
Tengo una pregunta relacionada pero diferente sobre aquí también. Declaro nmake, pero realmente es cualquier sistema de compilación: Scons, Bakefile, nmake, Ant, vcproj
La forma en que generalmente estructuro mi código es por "módulo". dentro de una aplicación o DLL. No solía usar espacios de nombres, pero eso no significa que no debas hacerlo.
Dentro del IDE tengo algo como esto:
/solution
/prj1
/headers
/module1
/module2
/resource
/source
/module 1
/module 2
/test
/prj2
/headers
/module1
/module2
/resource
/source
/module 1
/module 2
/test
En el sistema de archivos tengo algo como esto:
/solution
/prj1
/bin
/build
/include
/module1
/module2
/lib
/res
/src
/module1
/module2
/test
/prj2
/bin
/build
/include
/module1
/module2
/lib
/res
/src
/module1
/module2
/test