2011-02-08 9 views
6

¿Puede alguien proponer algunas buenas prácticas para organizar sus archivos fuente y gestionar compilaciones al usar C++ en Linux? Uso CMake para administrar mis compilaciones, aunque no utilizo construcciones complejas en este momento. Digamos que tenemos los siguientes tres escenarios.
1. Para que una aplicación makefile simplemente cree unos pocos archivos ejecutables a partir de archivos .cpp y .h simples
2. Para crear una biblioteca estática/compartida que use otras bibliotecas compartidas populares, por ejemplo, OpenCV y OpenGL.
3. Tipos más complicados, por ejemplo, digamos que necesitamos crear un archivo ejecutable cuyos archivos fuente utilicen bibliotecas externas como OpenCV y también una biblioteca estática personalizada que nosotros hemos creado nosotros mismos (por ejemplo, una biblioteca estática personalizada con encabezados asociados que construidos con el paso 2 anterior).Asesoramiento sobre la organización de fuentes y compilaciones en el desarrollo de C++ bajo Linux (CMake como generador)

Estoy seguro de que muchos de ustedes trabajan en proyectos de bibliotecas complicados donde el proceso de compilación no es tan simple. Tengo muchas ganas de respuestas asombrosas de entusiastas del código abierto y hackers que contribuyen a proyectos de código abierto. ¿Cómo organizan su código fuente?

Respuesta

4

Dado que está utilizando CMake, sugiero utilizar compilaciones fuera de origen (ya sea completamente fuera o en un subdirectorio build del directorio raíz del proyecto). Al usar más de una configuración y/o compilador al mismo tiempo, puede crear un directorio de construcción separado para cada uno.

En el CMakeLists.txt en el directorio raíz del proyecto puse encima de la materia que va a ser utilizado por todos los archivos en el CMakeLists.txtsrc subdirectorio. Puse todas las fuentes para los ejecutables y las bibliotecas en un subdirectorio src y generalmente agrupo las fuentes que forman una sola biblioteca o ejecutable dentro de su propio subdirectorio dentro de src junto con un CMakeLists.txt que describe cómo construirlo. Por lo general, no separo incluir archivos de las fuentes.

También tengo un subdirectorio cmake en el directorio raíz del proyecto donde puse archivos específicos para CMake como encontrar módulos y en mi caso un módulo especial cmake que corrigió las rutas que el IDE de Eclipse detecta automáticamente.

|--cmake 
| | 
| |--FindXXX.cmake 
| 
|--src 
| | 
| |--projectABC 
| | | 
| | |--CMakeLists.txt 
| | 
| |--library1 
| | | 
| | |--CMakeLists.txt 
| | 
| |--library2 
|  | 
|  |--CMakeLists.txt 
| 
|--CMakeLists.txt 
| 
|--build-release 
|--build-debug 
|--build-msvc-release 
|--[...] 
+0

Muchas gracias. – hAcKnRoCk

+0

@trenki ¿dónde colocas los archivos de cabecera comunes? ¿Tiene un directorio "incluir" en src? – hopia

+0

@hopia: En todo caso, puse _public_ header files para una biblioteca en un directorio "include" en el mismo nivel que el directorio "src" tal como lo hacen la mayoría de las bibliotecas de código abierto. – trenki

0

Sugiero organizar las fuentes por tema y tener directorios binarios (u objetos) separados. Archivos de encabezado y fuente en el mismo directorio. Un directorio para cada compilador o plataforma diferente:

Fields 
|-- src 
| field_int.hpp 
| field_int.cpp 
| 
|-- obj_linux_gcc 
| | 
| |-- debug 
| | 
| |-- release 
| 
|-- obj_windows_gcc 
| 
|-- obj_visual_studio 

En los últimos años en varias tiendas, he encontrado que la separación de los archivos de cabecera y de código en directorios separados, sin tomar en cuenta el tema, es un dolor de mantener y también tiene una mucho tiempo para familiarizarse con.

"Esa es solo mi opinión, podría estar equivocado". - Dennis Miller, comediante.

Cuestiones relacionadas