2010-04-09 17 views
13

He estado trabajando en proyectos Java/J2ee, en los que sigo la estructura Maven. Quiero desarrollar [decir un intérprete de línea de comandos en Linux {ubuntu}] en C. Nunca desarrollo proyectos en C. Quiero saber qué estructura de proyecto debo seguir.¿Cuál es una buena estructura de proyecto en C

Respuesta

9

No hay un "estándar" para el proyecto C en este aspecto. Ciertamente, si su proyecto es pequeño, con frecuencia todo se colocará en un solo directorio.

Puede tratar de descargar algunos proyectos populares de código abierto C y echar un vistazo a su código.

En un nivel inferior, el código debe ser modular. Cada módulo (que en C se suele manifestar en una estructura de datos con un conjunto de funciones para actuar sobre él) tiene su propio par de archivos .h y .c, siendo el archivo .h la interfaz pública visible para los clientes del módulo, y el archivo .c es la implementación privada.

+0

Estoy tratando de encontrar algo como esto. Estoy pensando en "maven", pero para C. ¿Debería haber un makefile, algunas pruebas? Maven se ha convertido en el estándar de facto en Java para la estructura de proyectos. –

2

Puede referirse a la estructura del proyecto OpenSSL. Es una fuente abierta famosa y tiene una buena estructura de proyecto.

5

Funcionalidades separadas en módulos: archivos .c con detalles de implementación/definiciones emparejados con archivos .h con declaraciones.

Trate de no contaminar espacios de nombres mediante el uso de funciones estáticas y un prefijo de módulo común para símbolos externos.

Crea bibliotecas si tienes funcionalidades que se pueden encapsular y reutilizar.

4

Una sugerencia:

/project 
    README 
    LICENCE 
    Makefile 
    # mabe configure.am Makefile.am etc. 
    # see http://en.wikipedia.org/wiki/GNU_build_system 
    /src 
     Makefile 
     a.h 
     a.c 
     b.h 
     b.c 
     /subunit 
      x.h 
      x.c 
      y.h 
      y.c 
     # each file.c has a header file.h but not necessarily 
     ... 

Mira Nginx en github y navegar por la estructura de proyectos en línea.

6

Como dijo Eli Bendersky, depende estrictamente de cuán complejo sea su proyecto.

La norma sugiere dividir tanto como sea posible en las bibliotecas. El punto es que es posible que desee reutilizar sus bibliotecas en otro lugar. Por ejemplo, este es un proyecto mío:

├── AUTHORS 
├── COPYING 
├── ChangeLog 
├── Makefile.am 
├── NEWS 
├── README 
├── configure.ac 
├── libs 
│ ├── featsel 
│ │ ├── Makefile.am 
│ │ ├── commander.c 
│ │ ├── featsel 
│ │ │ ├── commander.h 
│ │ │ ├── feattuple.h 
│ │ │ └── types.h 
│ │ ├── featsel.h 
│ │ ├── feattuple.c 
│ │ ├── headers 
│ │ │ └── datatypes.h 
│ │ └── tests 
│ │  ├── Makefile.am 
│ │  └── test00.c 
│ ├── mbox 
│ │ ├── Makefile.am 
│ │ ├── README 
│ │ ├── control.c 
│ │ ├── error.c 
│ │ ├── headers 
│ │ │ ├── datatypes.h 
│ │ │ ├── mail.h 
│ │ │ ├── parse.h 
│ │ │ ├── split.h 
│ │ │ └── strings.h 
│ │ ├── interface.c 
│ │ ├── mail.c 
│ │ ├── mbox 
│ │ │ ├── descriptor.h 
│ │ │ ├── error.h 
│ │ │ ├── mail.h 
│ │ │ └── types.h 
│ │ ├── mbox.h 
│ │ ├── parse.c 
│ │ ├── split.c 
│ │ └── strings.c 
│ └── thread_queue 
│  ├── Makefile.am 
│  ├── thrdqueue.c 
│  └── thrdqueue.h 
├── reconf 
└── src 
    ├── Makefile.am 
    └── main.c 

yo personalmente prefiero poner todas las bibliotecas en un directorio libs. Cada biblioteca, excepto las triviales, tiene su propio directorio de encabezado privado y exporta un encabezado público por medio de un directorio que tiene el mismo nombre de la biblioteca.

El archivo de origen del programa se coloca en el directorio src.

Cuestiones relacionadas