¿Cuál es la mejor manera de organizar el código de mi proyecto C y sus bibliotecas externas?[cerrado]

StackOverflow https://stackoverflow.com/questions/26964

  •  09-06-2019
  •  | 
  •  

Pregunta

Estoy comenzando un nuevo proyecto en C, que se basa principalmente en OSS.También estará en SourceForge y me gustaría aprovechar esta oportunidad para conocer las mejores prácticas establecidas para organizar este tipo de código.Estoy usando bibliotecas como libcurl y libz, y las compilaré usando MinGW y MSYS.

Distribuiré copias del código fuente de todas las bibliotecas que estoy usando con mi proyecto, para que las personas que descarguen el código fuente no tengan que buscar dependencias.¿Cómo debo llamar al directorio donde almaceno las bibliotecas?Hasta ahora dudo entre:

  • lib, porque son bibliotecas.Sin embargo, 'lib' tiene una connotación diferente en el mundo UNIX.
  • src, porque son archivos fuente.
  • 3.º, porque no lo escribí yo.

¿Y dónde debería compilar estas bibliotecas?¿Debería simplemente configurarlas e instalarlas en la raíz del sistema, o debería configurar un directorio donde todas las bibliotecas deberían compilarse y vincularse desde allí?Obviamente, esto tendrá ramificaciones para mi Makefile.

¿Cómo debo hacer esto?¿Existen convenciones establecidas que debo seguir?¿Están escritos en alguna parte?

¿Fue útil?

Solución

Primero, para bibliotecas externas usaría vendor, pero eso es sólo una preferencia.

En segundo lugar, no creo que sea una buena idea instalar otro bibliotecas en la raíz del sistema, sin que el usuario lo sepa.Lo más importante es que esto entrará en conflicto con versiones posteriores instaladas de esas bibliotecas.Entonces creo que el mejor lugar para estas bibliotecas sería el mismo directorio que su aplicación.

También puedes compilar estáticamente estas bibliotecas en tu programa.

Otros consejos

En un trabajo anterior, el estándar era instalarlos en un directorio llamado 3rdparty y construir las bibliotecas allí mismo (en 3rdparty/LIBNAME/Debug, etc.).

Usamos algo con el sufijo _ext o _EXT (es decir, MyProject_EXT) para indicar que es externo a nuestro proyecto para almacenar el código fuente de los paquetes externos que vinculamos.

Estoy de acuerdo con Pedro.Las bibliotecas externas no deben integrarse en la raíz del sistema, ya que pueden causar conflictos.Los compilaría en su directorio y luego los instalaría en un directorio /lib (o tal vez /extlib) que sea exclusivo de su aplicación y los vincularía allí.

Por favor no envíe fuentes de terceros con su código, ya sea en la fuente o vinculados estáticamente a los binarios, o de cualquier otra manera.Eso simplemente interferirá con otras copias del mismo y no se actualizará cuando la biblioteca requiera reparación.Dígale al usuario cuáles son los requisitos (¡y manténgase al día con los cambios de API en la biblioteca!).Un usuario autocompilador se asegurará de obtener las dependencias, una distribución se asegurará de que su paquete funcione con la versión que envía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top