Ho un programma abbastanza grande scritto in C. Si estende su diversi file e ha un po 'di riattrezzamento per tentare di compensare i problemi della piattaforma. Nello specifico, ho i file di intestazione per diversi SO, architetture e compilatori che definiscono le macro che usa per gestire le cose. Ad esempio, il flag -v
stampa informazioni sulla versione, incluso il nome del compilatore che lo ha generato, e il sistema operativo e l'architettura su cui è stato costruito. Come esempio del perché è importante, il programma può creare un file di codice C e, se lo desideri, compilarlo - un compito per il quale fa semplicemente una chiamata di sistema a qualsiasi compilatore con il quale è stato creato.Come riconfigurare un programma di grandi dimensioni per GNU Autotools
Ha anche il supporto per la libreria GNU Readline (o la libreria BSD Editline - stessa cosa) se è presente nel sistema, così come un equivalente senza tutte le funzioni di Readline che è puro ANSI se non si ce l'ho.
La linea di fondo è che non riesco a rimuovere nessuno dei bit dipendenti dalla piattaforma, poiché diverse funzioni dipendono in maniera piuttosto pesante da quale OS/architettura/compilatore si dispone. Voglio anche fornire una buona funzionalità a chi ce l'ha. E voglio che le persone lo scarichino e lo installino con un'interfaccia standard ./configure
, make
e make install
.
Attualmente sto usando uno script shell scusato per lo configure
che crea il Makefile da zero e determina quali file di intestazione includere in base al proprio OS/architettura/compilatore. Mi piacerebbe un approccio più efficiente e mi piacerebbe utilizzare un sistema di build più standard usando GNU Autotools. In questo modo so che quello che faccio funzionerà sul computer di qualcun altro senza dover andare in giro a testarlo sui loro computer.
La mia domanda, per quelli di voi che hanno sfondato tutto ciò (grazie!), È: 1) Come faccio a passare da un sistema di compilazione homebrew a GNU Autotools? 2) Quali buone esercitazioni ci sono per iniziare con GNU Autotools? 3) Come posso rendere questo un processo relativamente indolore?