Una muy buena pregunta y la respuesta no es simple. Varias cosas para considerar Aquí hay algunas opiniones de mi experiencia hasta el momento.
Código Común vs Proyecto-Local Copia
Una decisión importante es si utilizar código de la biblioteca "común" que se actualiza automáticamente desde una ubicación central ("biblioteca de reutilización" de su empresa), o si se debe mantener una copia del proyecto local.
Esto se discute en detalle en this SO question.
El beneficio de una biblioteca central es que el trabajo realizado una vez puede beneficiar a muchos proyectos. La dificultad con una copia de proyecto local es que las correcciones de errores y mejoras no se envían a la biblioteca central, y las correcciones de errores en la biblioteca central no se pueden incorporar a su proyecto.
Pero una dificultad potencial con el uso de una biblioteca central es si las personas en su particular lo modifican de forma descontrolada para adecuarse a su proyecto, y rompe involuntariamente otros proyectos. Lo he visto personalmente, en un código "común" que se llenó de #ifdefs y regularmente rompió otros proyectos.
Para obtener un buen valor de código común biblioteca también conocido como el centro de reutilización:
La biblioteca:
- deben tener requisitos bien definidos, la API y las pruebas unitarias
- deben evitar específica del proyecto código; debe ser de uso general
- debe tener un mecanismo para establecer claramente la configuración específica del proyecto (esto se puede ver como parte de la API, efectivamente)
- debe tener un proceso formal de publicación, con números de versión y arreglos, problemas debe ser rastreado.
proyectos individuales:
- no deben recibir de forma automática y ciegamente "la última", sino que debe ser capaz de obtener una "liberación" en particular con un número de versión especificado. Entonces los proyectos deberían tener control sobre si/cuándo se actualizan a una versión más nueva. El proyecto debe poder seguir claramente, "estamos usando la versión 1.2.3 de la biblioteca xyz".
- debe evitar "bifurcando" el código de la biblioteca si es posible. P.ej. evite agregar "características" específicas del proyecto al código de la biblioteca.
- debe rastrear cualquier modificación local al código de la biblioteca
- debe considerar los errores como errores de la biblioteca, para ser reparados en la biblioteca central si es posible. La empresa debería tener procesos para arreglarlos en la biblioteca central, probar la biblioteca con su propio conjunto de pruebas unitarias (probablemente mejorando las pruebas unitarias para detectar el error en el futuro). A continuación, libere una nueva versión de la biblioteca central, según sea necesario, e impleméntela en otros proyectos si estos proyectos lo consideran oportuno.
Si una empresa no tiene un proceso así, un proyecto debe hacer una copia local de un código (digamos, copiado de un proyecto anterior) y luego asumir la responsabilidad total del proyecto local a partir de entonces. Todavía estás obteniendo algún beneficio de la reutilización en esa situación, porque no estás reescribiéndolo desde cero.
proyecto referenciado configuración
Si el código necesita configuración específica del proyecto, lo ideal es que debe mantenerse a una parte tan pequeña del código como sea posible - no se dispersa a través de un montón de archivos de origen. Idealmente, un solo archivo de encabezado. Pero posiblemente también un archivo .C (por ejemplo, si necesita definir algunas tablas de búsqueda). La biblioteca debe proporcionar una plantilla, con las opciones bien comentadas.
Para obtener un buen ejemplo de cómo se puede hacer esto, consulte el µC/OS-II RTOS (book) de Jean Labrosse, en Micrium.