Qual è il modo migliore per organizzare il mio C codice progetto e le sue librerie esterne?[chiuso]

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

  •  09-06-2019
  •  | 
  •  

Domanda

Sto iniziando un nuovo progetto, che è in gran parte OSS-based.Sarà anche su SourceForge, e vorrei approfittare di questa opportunità per imparare le migliori prassi per l'organizzazione di questo tipo di codice.Io sto usando le librerie come libcurl e libz, e io compilarlo usando MinGW e MSYS.

Sarò la distribuzione di copie la fonte di tutte le biblioteche sto usando con il mio progetto, così la gente scaricato i sorgenti, non dovrete andare peck e la caccia per le dipendenze.Cosa dovrei chiamare la directory per memorizzare le biblioteche?Finora, non ho esitato tra:

  • lib, perché sono le librerie.Tuttavia, 'lib' ha una connotazione diversa in UNIX-mondo.
  • src, perché sono i file di origine.
  • 3rdparty, perché non ho scritto.

E dove dovrei compilare queste librerie?Devo semplicemente configurare e installare il sistema di root, o dovrei creare una directory in cui tutte le biblioteche devono compilare e link da lì?Ovviamente, questo non avrà conseguenze per il mio Makefile.

Come devo fare?Ci sono delle convenzioni che devo seguire?Sono scritte da qualche parte?

È stato utile?

Soluzione

Primo, per le librerie esterne vorrei utilizzare vendor, ma è solo una preferenza.

Secondo, io non credo che sia una buona idea installare altri raccolte in un sistema di root, senza che gli utenti la conoscenza.Ancora più importante, perché questo è in conflitto con successive versioni installate di queste librerie.Quindi penso che il posto migliore per queste librerie vorresti essere nella stessa directory dell'applicazione.

Si potrebbe anche staticamente compilare queste librerie nel vostro programma.

Altri suggerimenti

In un lavoro precedente, la norma era quello di installare in una directory di nome 3rdparty e creare le librerie a destra c' (in 3rdparty/LIBNAME/Debug, etc.).

Usiamo qualcosa con il _ext o _EXT suffisso (io.e MyProject_EXT), per indicare che è esterno al nostro progetto per memorizzare il codice sorgente di pacchetti esterni che si collegano contro.

Sono d'accordo con Pietro.Le librerie esterne non deve essere integrato nel sistema di root, in quanto possono causare conflitti.Mi piacerebbe costruire nella loro directory e quindi installare in una directory /lib (o forse /extlib) che è unico per la vostra applicazione e il link al loro posto.

Si prega di non nave fonti di terze parti, con codice sorgente o collegate staticamente nel file binari, o in qualsiasi altro modo.Che può interferire con altre copie dello stesso, e non vengono aggiornati quando la biblioteca richiede di fissaggio.Fare dire all'utente che i requisiti sono (e tenere il passo con i cambiamenti API in libreria!).Un auto-compilazione di un utente farà in modo di ottenere le dipendenze, una distribuzione di assicurarsi che il proprio pacchetto funziona con la versione che loro nave.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top