2011-02-02 27 views
5

Lo so, deve essere una domanda stupida. Suppongo di avere una libreria che utilizza un sistema di compilazione di autotools. Possiedo tutto questo configure, configure.ac, Makefile.am, config.h e altri file nella cartella principale del progetto. Alcuni di loro sono stati scritti da uno sviluppatore, altri sono generati da autotools.Autotools e controllo versione

La domanda è: se utilizzo un sistema di controllo versione (nel mio caso - hg) - quale di tutti i file di autotools dovrebbero essere tracciati da un VCS e quali non dovrebbero (hgignore'd)?

Grazie, Serge

+0

possibile duplicato di [Quali file generati da Autotools dovrei conservare nel repository Git?] (Http://stackoverflow.com/questions/3290908/which-files-generated-by-autotools-should-i-keep-in -git-repository) – ptomato

risposta

10

Penso che la procedura migliore sia quella di mettere i file sotto controllo di versione che non vengono generati: le persone che lavorano con VCS sono sviluppatori e dovrebbero avere gli autotools installati sulle loro macchine, il check-in dei file generati causerà solo problemi.

D'altra parte è necessario assicurarsi che la distribuzione a livello di origine sia eseguita con tutti i file generati, in modo che i non sviluppatori siano in grado di creare il software senza gli autotools installati.

+0

Sembra che il problema sia risolto per me: ho aggiunto uno script autogen.sh al repository. Questo script ricrea tutti i file relativi agli autotools da configure.ac e Makefile.am. Gli sviluppatori possono ora eseguire questo script e ricostruire il software. Per gli altri utenti c'è un target makefile - dist. Crea un archivio tar con le fonti e tutti gli script di autotools inclusi. – zserge

+3

non hai davvero bisogno di autogen.sh anche - autoreconf è installato con gli autotools e fa esattamente questo per te. – Flexo

+2

Ne hai bisogno se usi cose come intltool che richiedono un passaggio di configurazione separato. – ptomato

4

Ci sono due scuole di pensiero su questo:

  1. "Voglio vedere il progetto esattamente come era al tempo/versione X"
  2. "posso re-generare sempre tutto ciò che è stato generato automaticamente in seguito "

In genere cado in quest'ultimo gruppo personalmente, ma il primo può essere bello se il sono/erano problemi con il sistema di compilazione in alcune versioni specifiche che probabilmente non hai più installato.

Nel tuo esempio configure e config.h sono entrambi (probabilmente) generati automaticamente, quindi se avete intenzione di includere nel controllo di versione sarei propenso a includere il Makefile.in troppo.

Nei miei progetti significa questo di solito non avere più autotools file relativi a configure.ac, Makefile.am, la documentazione se si tratta di GNU e una directory chiamata m4 che include tutti/macro non standard personalizzati mia configure.ac richiede.

+0

Preferisco anche la seconda. In questo caso la libreria sarà sempre costruita dal repository su una macchina, che ha installato gli autotools. Quindi, mi piacerebbe avere il minor numero possibile di file relativi agli autotools nel mio repository. – zserge

+1

Le due scuole di pensiero non si escludono a vicenda. Si archiviano i file non generati nel VCS e si archiviano i tarball di rilasci da qualche altra parte, spesso in una directory di pari livello nell'archivio del codice sorgente canonico. –