Quali sono le differenze tra Autotools, Cmake e Scons?
Quali sono le differenze tra Autotools, Cmake e Scons?
Risposte:
In verità, l'unica vera "grazia salvifica" di Autotools è che è ciò che tutti i progetti GNU utilizzano ampiamente.
Problemi con gli autotools:
Funziona ... il più delle volte ... è tutto ciò che puoi dire su Autotools. È un sistema che risolve diversi problemi che riguardano veramente solo il progetto GNU ... per il loro codice base, toolchain di base. (Modifica (24/05/2014): Va notato che questo tipo di preoccupazione è una cosa potenzialmente MALE di cui preoccuparsi: Heartbleed deriva in parte da questo pensiero e con sistemi corretti e moderni, davveronon ha affari a che fare con gran parte di ciò per cui Autotools corregge. GNU probabilmente ha bisogno di fare una rimozione cruft del codebase, alla luce di quello che è successo con Heartbleed) Puoi usarlo per fare il tuo progetto e potrebbe funzionare bene per un progetto piccolo che non ti aspetti di lavorare ovunque tranne Linux o dove la toolchain GNU funziona chiaramente correttamente. L'affermazione che essa "si integra bene con Linux" è piuttosto la dichiarazione coraggiosa e molto corretta . Si integra abbastanza bene con la suite di strumenti GNU e risolve i problemi che l'IT ha con i suoi obiettivi.
Questo non vuol dire che non ci sono problemi con le altre opzioni discusse nel thread qui.
SCons è più di un sostituto di Make / GMake / etc. e sembra piuttosto carino, tutto sommato Comunque ...
Gli esempi forniti per CMake in questo thread sono un po 'falsi.
Però...
In verità, i tuoi obiettivi dovrebbero dettare ciò che scegli qui.
C'è una ragione per cui molti, molti progetti stanno abbandonando qmake, Autotools, ecc. E passando a CMake. Finora, posso aspettarmi con chiarezza che un progetto basato su CMake cada in una situazione di compilazione incrociata o su un'installazione di VisualStudio o abbia bisogno solo di una piccola quantità di pulizia perché il progetto non ha tenuto conto delle parti solo per Windows o solo per OSX alla base di codice. Non posso davvero aspettarmi che da un progetto basato su SCons- e mi aspetto completamente che 1/3 o più progetti di Autotools abbiano sbagliato QUALCOSA che gli impedisce di costruirsi proprio su qualsiasi contesto tranne quello dell'host o uno di Scratchbox2.
Una distinzione importante deve essere fatta tra chi usa gli strumenti. Cmake è uno strumento che deve essere utilizzato dall'utente durante la creazione del software. Gli autotools sono usati per generare un tarball di distribuzione che può essere usato per costruire il software usando solo gli strumenti standard disponibili su qualsiasi sistema conforme a SuS. In altre parole, se si sta installando un software da un tarball creato utilizzando gli autotools, non si stanno utilizzando gli autotools . D'altra parte, se si sta installando un software che usa cmake, allora si sta utilizzando cmake e deve averlo installato per costruire il software.
La grande maggioranza degli utenti non ha bisogno di avere gli autotools installati sulla propria scatola. Storicamente, molta confusione è stata causata dal fatto che molti sviluppatori distribuiscono tarball non validi che costringono l'utente a eseguire autoconf per rigenerare lo script di configurazione, e questo è un errore di packaging. Una maggiore confusione è stata causata dal fatto che la maggior parte delle principali distribuzioni Linux installa più versioni degli autotools, quando non dovrebbero installarne nessuna per impostazione predefinita. Ancora più confusione è causata dagli sviluppatori che tentano di utilizzare un sistema di controllo della versione (ad esempio cvs, git, svn) per distribuire il loro software piuttosto che creare tarball.
asciidoc
o help2man
o doxygen
o, soprattutto, la combinazione Autotool corretta. Questo è stato un enorme problema di marketing per gli autotools. Gli utenti pensano erroneamente di aver bisogno di installare autoconf perché non comprendono la differenza tra tarball e VCS.
Non si tratta di standard di codifica GNU.
I vantaggi attuali degli autotools - in particolare se usati con automake - sono che si integrano molto bene con la costruzione della distribuzione Linux.
Con cmake per esempio, è sempre "ho bisogno di -DCMAKE_CFLAGS o -DCMAKE_C_FLAGS di cui ho bisogno?" No, non è nemmeno, è "-DCMAKE_C_FLAGS_RELEASE". Oppure -DCMAKE_C_FLAGS_DEBUG. È confuso - in autoconf, è solo ./configure CFLAGS = "- O0 -ggdb3" e ce l'hai.
In integrazione con le infrastrutture di costruzione, gli scons hanno il problema che non è possibile utilizzare make %{?_smp_mflags}
, _smp_mflags
in questo caso si tratta di una macro RPM che si espande approssimativamente alla potenza del sistema (l'amministratore può impostarlo). Le persone mettono qui cose come -jNCPUS nel loro ambiente. Con gli scons che non funzionano, quindi i pacchetti che usano gli scons possono essere distribuiti solo in serie in distro.
./configure CFLAGS=-O0
fallisce spesso con pacchetti che sovrascrivono CFLAGS nel makefile e richiedono invece l'esecuzione da parte dell'utente ./configure --enable-debug
. (ad es tmux
.).
Ciò che è importante sapere sugli Autotools è che non sono un sistema di generazione generale: implementano gli standard di codifica GNU e nient'altro. Se vuoi creare un pacchetto che segua tutti gli standard GNU, gli Autotools sono uno strumento eccellente per il lavoro. Se non lo fai, allora dovresti usare Scons o CMake. (Ad esempio, vedi questa domanda .) Questo malinteso comune è da dove proviene la maggior parte della frustrazione con Autotools.
AUTOMAKE_OPTIONS = -foreign
in Makefile.am
. (O -foreign
nel tuo autogen.sh
. Penso che quasi tutti lo usino.)
installcheck
e distclean
. Se provi a cambiare quel tipo di comportamento mentre usi ancora gli Autotools, allora stai solo perdendo tempo.
Mentre dal punto di vista degli sviluppatori, cmake è attualmente il più facile da usare, dal punto di vista dell'utente gli autotools hanno un grande vantaggio
gli autotools generano un singolo script di configurazione del file e tutti i file per generarlo vengono spediti con la distribuzione. è facile da capire e risolvere con l'aiuto di grep / sed / awk / vi. Confronta questo con Cmake in cui si trovano molti file in / usr / share / cmak * / Modules, che non possono essere riparati dall'utente a meno che non abbia accesso come amministratore.
Quindi, se qualcosa non funziona del tutto, di solito può essere facilmente "riparato" usando gli strumenti Unix standard (grep / sed / awk / vi ecc.) In un modo da mazza senza dover capire il sistema di compilazione.
Hai mai scavato nella tua directory di build di cmake per scoprire cosa non va? Rispetto al semplice shellscript che può essere letto dall'alto verso il basso, seguire i file Cmake generati per scoprire cosa sta succedendo è abbastanza difficile. Inoltre, con CMake, l'adattamento dei file FindFoo.cmake richiede non solo la conoscenza del linguaggio CMake, ma potrebbe anche richiedere i privilegi di superutente.