2009-03-01 27 views
52

Sono un utente molto frequente di GNU Autotools (principalmente Autoconf, occasionalmente Libtool). Sto lavorando a un progetto in cui la portabilità sarà un punto critico. Eppure, il resto del team non si trova a proprio agio con lo m4. Ho this nella mia casella di posta da non uno, ma quattro persone:Alternative a Autoconf e Autotools?

m4 is NOT lisp, dammit!

In ogni caso, forse qualcuno potrebbe consigliarmi qualcosa Python o PHP based? Sto lavorando all'estremità C di un albero molto più grande; Posso essere sicuro che sia presente Python o PHP   5, in quanto prerequisiti.

+9

La familiarità con m4 è irrilevante. Discutere contro autoconf a causa di m4 è come discutere contro C perché il compilatore usa un lexer generato da lex e gli sviluppatori non capiscono lex. Quando si utilizzano gli autotools, è possibile ignorare completamente m4 il 98% delle volte. Nel restante 2%, puoi anche ignorare m4! Di solito, se ti trovi ad avere problemi relativi a m4 è perché stai facendo qualcosa di fondamentalmente sbagliato. –

+4

@WilliamPursell dopo un paio di anni da quando ho chiesto questo, sono tendenzialmente d'accordo. Ma il problema rimane - È semplicemente troppo facile imboccare un percorso fondamentalmente sbagliato che lo usa. E, quando vuoi un controllo di costruzione davvero granulare da configurare, alla fine premi M4. A meno che non mi sia sfuggito qualcosa? –

+0

@TimPost Ho dovuto affrontare un argomento simile anni fa. Nessuno voleva imparare M4 (o niente se poteva essere aiutato). Il progetto è diventato una combinazione di script bash e python, oltre a un'orribile app C++ che utilizzava principalmente le macro in stile C. Infine, dopo aver avuto l'autorità di asciarlo dopo 6 mesi che il sistema si è complicato in modo arbitrario (app per C++ che chiama python e script di shell tramite 'system (2)'), ho scambiato questo pasticcio con uno script M4 di 200 righe. Non arriverò mai ad accettare "non vogliamo impararlo" come scusa valida. – DevNull

risposta

33

Ho sentito cose positive su CMake che tenta di risolvere gli stessi problemi. Here è l'articolo di wikipedia

+0

Usandolo per un lungo periodo e senza grossi problemi. – Anonymous

+0

Suggerirei la stessa cosa. Mi sono fatto questa domanda qualche tempo fa e sono giunto alla conclusione che CMake è la risposta giusta. – Juliano

+21

Grazie, sembra che Cmake farà esattamente quello di cui ho bisogno.In questi giorni, se anche I PIÙ PICCOLI "autoconf" abitanti del villaggio con torce e forconi si presentano alla mia scrivania: | –

38

Ho avuto un buon successo con SCons. È costruito con Python e gli script di compilazione sono in realtà script di Python stessi, il che conferisce un notevole potere espressivo. Dal sito web:

SCons è uno strumento di costruzione software Open Source, ovvero uno strumento di generazione di nuova generazione. Pensa a SCons come un sostituto migliorato e multipiattaforma per la classica utility Make con funzionalità integrate simili a autoconf/automake e cache del compilatore come ccache. In breve, SCons è un modo più semplice, affidabile e veloce per creare software.

2

Ho dato un'occhiata a CMake, che sembra una buona alternativa a meno che non si stia eseguendo il cross-compiling. Se stai eseguendo la compilazione nativa, dovresti provarla.

1

C'è una versione python di make creata in Mozilla - pymake - che presumibilmente supporta l'uso multipiattaforma.

+0

Tutto ciò che PyMake fa davvero è correggere GNU fare bug su Windows che sono stati corretti in GNU comunque. – refi64

+0

@ kirbyfan64sos contento che il team di GNU non abbia perso gli ultimi sei anni –

18

Ci sono un sacco di diversi generatori Makefile alternativa e costruire sistemi di là fuori:

Disponibile anche, ma non strettamente targete D su C/C++:

  • Premake
  • Ant (per Java)
  • Rake (per Ruby)
  • (Decisamente più, solo che non sanno tutti ...)

Ma dopo aver elencato tutto questo, gli autotools hanno il grande vantaggio di non richiedere altre dipendenze per l'utente finale. Uno script di configurazione viene generato solo una volta dallo sviluppatore e non richiede nulla di speciale sul lato utente, in quanto è uno script di shell. Gli strumenti sopra elencati devono essere installati prima che chiunque possa creare la tua fonte e potrebbero persino avere delle dipendenze.

+1

Uno script di configurazione richiede una shell sh compatibile, che è qualcosa di speciale su una macchina Windows. – Caotic

+7

Quindi, qual è il punto se avete bisogno di software aggiuntivo comunque su Windows? Nessuna differenza se installate python o qualche shell. – raimue

+0

Ecco una grande lista con maggiori dettagli in [Wikipedia Build Automation List] (https://en.wikipedia.org/wiki/List_of_build_automation_software) – requinham

1

Per la creazione di software C/C++ da ANT o maven potresti essere interessato a terp. Comprende un compito di compilazione C++ portatile che funziona con molti compilatori C++ su molte piattaforme.

43

Sto prendendo la possibilità di essere downvoted ma, devo ammettere, che purtroppo non esiste un reale sostituto per gli autotools. CMake, SCons, bjam sono gentili ma, quando si tratta di lavorare seriamente ... è abbastanza chiaro che gli autotools sono superiori, non perché CMake non possa fare la stessa cosa, ma perché è molto più difficile farlo con esso .

Per esempio, CMake, l'alternativa più popolare al autotools, ha i seguenti inconvenienti:

  • Nessun supporto di gettext. Questo potrebbe essere un problema reale quando devi gestire molte traduzioni e tradurre il codice sorgente.
  • Nessun supporto per una destinazione di disinstallazione. È abbastanza spiacevole scoprire che non è possibile disinstallare il programma installato.
  • Nessuna build automatica di entrambe le librerie condivise e statiche.
  • La documentazione è molto limitata a.

E così via.

Ci sono molti altri punti. Sfortunatamente, non esiste un vero sostituto di alta qualità per gli autotools. D'altra parte, se si sviluppa su Windows e per Visual Studio, non è possibile utilizzare gli autotools e è necessario scegliere CMake che fornisce tali strumenti.

+3

Tutto ciò che dici vero !! Se sei bloccato con Windows/Linux x86/Mac OS X ** ** SCons ** e ** CMake ** sembrano più semplici degli strumenti automatici. Ma se vieni su una piattaforma insolita ottieni molti problemi ... – gavenkoa

+14

Spesso le persone trascurano la ragione per cui Autotools è scritto in m4. È scritto in m4 in modo che lo script di configurazione possa essere generato in _pure shell_ in modo che qualsiasi piattaforma UNIX possa essere indirizzata. CMake d'altra parte bersaglia qualsiasi cosa abbia CMake. Ora cosa è più comune? CMake o Bourne Shell? Tenderei a dire Bourne Shell. Inoltre, non è colpa degli autori di Autoconf che Windows trascuri di fornire una shell decente. – alternative

+0

Considero questa la migliore risposta. Sto lavorando con gli autotools regolarmente ed è davvero doloroso, a volte. Ma ottengo sempre le cose e gli autotools standard forniscono la configurazione risultante e Makefile è eccezionalmente utile. Di tanto in tanto uso cmake e devo ammettere che è molto più difficile da usare (come nel costruire la fonte) e non ci sono abbastanza risorse online per ottenere rapidamente le cose che sto facendo con gli autotools. –

13

Che ne dici di utilizzare semplicemente Make e pkg-config?

Ecco un Makefile template per iniziare.

Meno è più persone.

+2

Quel modello di Makefile non supporta le dipendenze automatiche, che è _ veramente bello. – alternative

+0

è a cosa serve pkg-config? http://hg.suckless.org/surf/file/tip/config.mk#l13 – hendry

+2

Non è quello che intendevo. Intendo le dipendenze interne generate dal codice sorgente tra le intestazioni, come fa GCC. Non è particolarmente difficile da fare una volta capito come, ma può essere un po 'un dolore. – alternative