Come gestire correttamente le dipendenze per il progetto C / C ++?

9

Ho un progetto che utilizza 3-4 diverse librerie C / C ++ open source.

Ho costruito queste librerie per diverse piattaforme e ho incluso i file e le librerie statiche per diverse piattaforme nel mio progetto.

Tuttavia, ho difficoltà con un paio di problemi. Tutti questi progetti riguardano la gestione delle dipendenze. E sto cercando consigli sulle migliori pratiche.

1) Come faccio a sapere che cosa esattamente uso?

Non ho un modo di ottenere una versione di una lib statica. Come risultato, ho bisogno di tracciare in qualche modo quale versione di lib statico sto usando (potrebbe essere SHA di un commit da cui è stato creato)?

Questo è particolarmente importante quando ho bisogno di capire quando aggiornare queste librerie.

2) Come riprodurre la build?

Avrei potuto faticare a costruire una libreria specifica per una piattaforma specifica. Mi ci è voluto un po 'per capirlo.

La prossima volta che avrò bisogno di costruire la stessa libreria potrebbe essere tra un anno e mezzo (quando avrò bisogno di aggiornare per qualsiasi motivo.) Tuttavia, a quel punto, non ricorderò assolutamente nulla e un ambiente in cui è stato costruito sarà finito da tempo.

3) Devo sborsare queste librerie per avere una copia del codice sorgente?

Questa è una preoccupazione minore. Tuttavia, è ancora una preoccupazione. È bello assicurarsi che le build siano riproducibili (e questo tipo richiede il codice sorgente).

    
posta Victor Ronin 29.12.2016 - 03:03
fonte

2 risposte

4

Hai davvero bisogno di usare sempre una versione esatta di una libreria dipendente? È scritto male / si rompe è API con ogni aumento minore nella versione?

Se si guardano progetti open-source, gli script di build ( configure in gran parte) controllano se sono presenti varie librerie e se non lo fanno, genera un errore. È anche abbastanza flessibile da consentire all'utente di collegarsi a una versione più recente della libreria (che probabilmente fornisce più correzioni di bug / sicurezza rispetto a una precedente) e inoltre non impone il collegamento statico o dinamico.

Se hai veramente bisogno di build riproducibili, dovresti anche prestare attenzione alla versione esatta del compilatore e alle sue librerie standard, forse anche al sistema operativo. In questo caso, avere una macchina di compilazione con l'ambiente esatto di cui hai bisogno è, a mio parere, meglio di controllare le librerie compilate nel repository del codice sorgente.

    
risposta data 29.12.2016 - 10:02
fonte
2

How do I know what exactly do I use?

Se i file include oi file libs non contengono già un numero di versione, aggiungi un file di testo "version.txt" (contenente il numero di versione) da solo a ogni cartella di lib e controllalo nel tuo VCS, insieme alla lib e includere i file. Tuttavia, se si esegue la versione completa della lib (punto 3), è probabile che ci sia già un file di codice sorgente contenente il numero di versione, quindi non è necessario gestirne uno per questo caso.

How do I reproduce the build?

Cerca di automatizzare il più possibile. Usa script, makefile o file dei tuoi strumenti di creazione preferiti. Metti tutto sotto controllo del codice sorgente. Se sono necessari passaggi manuali, scrivere i dettagli in un file di testo (ad esempio, readme_build.txt) e inserirli anche sotto il controllo del codice sorgente.

Should I fork these libraries to have a copy of source code?

Dovresti avere una copia del codice sorgente , ma fork solo se necessario (ad esempio, se incappi in un bug urgente e l'autore originale non è in grado di risolverlo entro i tuoi limiti temporali). Oppure, se gli autori utilizzano un ambiente di compilazione diverso da te, ed è necessario apportare alcune modifiche per far funzionare la lib nel tuo ambiente. Tuttavia, tieni presente che ogni modifica al codice sorgente originale nella tua forcella probabilmente rende più difficile integrare gli aggiornamenti in un secondo momento.

Tuttavia, ti consiglio di ottenere una copia del codice sorgente originale (non funzionante) delle librerie che stai utilizzando. Ciò ti consentirà di biforcare o mantenere la lib in un secondo momento se necessario, anche se il manutentore originale decide di revocare le fonti lib dal web pubblico.

    
risposta data 29.12.2016 - 10:56
fonte

Leggi altre domande sui tag