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
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.
Puede referirse a la estructura del proyecto OpenSSL. Es una fuente abierta famosa y tiene una buena estructura de proyecto.
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.
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.
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.
- 1. ¿Cuál es su estructura de proyecto/estructura de proyecto favorita/recomendada para Pruebas unitarias usando Boost?
- 2. ¿Cuál es una buena manera de construir un proyecto Backbone.js?
- 3. ¿Cuál es una buena estructura de directorios para proyectos mayores de C++ que usan Makefile?
- 4. Repositorio de código. ¿Cuál es una buena?
- 5. ¿Cuál es una buena estructura de código para el procesamiento de vértices independiente de api?
- 6. ¿Cuál es la mejor estructura para un proyecto Android SVN?
- 7. ¿Cuál es una buena forma de implementar una aplicación Perl?
- 8. ¿Cuál es una buena estructura de datos para usar para contener dos valores?
- 9. ¿Cuál es una buena estructura de datos para mantener los valores acumulados?
- 10. ¿Cuál es una buena estructura de datos para fechas periódicas o recurrentes?
- 11. ¿Cuál es una buena estructura de solución para permitir una fácil personalización de un producto por cliente?
- 12. ¿Es una buena práctica crear siempre un .cpp para cada .h en un proyecto de C++?
- 13. ¿Qué es una estructura "empaquetada" en C?
- 14. ¿Buena estructuración de JavaScript en un proyecto?
- 15. ¿Cuál es una buena manera de verificar si un doble es un número entero en C#?
- 16. ¿Cuál es una buena estructura de datos para crear clases de equivalencia en los nodos de un árbol?
- 17. Estructura de carpetas para un proyecto C
- 18. cuál es una buena manera de eliminar los últimos directorios
- 19. ¿Cuál es la estructura del directorio del proyecto para una aplicación Java SE independiente?
- 20. ¿Cuál es la buena plataforma cruzada C++ IDE?
- 21. ¿Cuál es una buena configuración para noCompressionUserAgents en Tomcat?
- 22. Cuál es una buena alternativa para openinviter en Django
- 23. ¿Es posible/aconseja almacenar un vector en una estructura? C++
- 24. C# - ¿Agregar una interfaz sistemáticamente es una buena práctica?
- 25. C estructura y C++ estructura
- 26. ¿Cuál es una buena introducción intermedia al Esquema?
- 27. ¿Cuál es una buena metáfora de la inyección de dependencia?
- 28. ¿Cuál es una estructura de solución recomendada para un sitio web algo grande en asp.net
- 29. ¿Cuál es una buena manera de escribir una interfaz de usuario Cocoa en una aplicación Erlang?
- 30. ¿Cuál es una buena manera de encontrar un valor específico en un documento XML usando C#?
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. –