2013-01-07 15 views
10

ho bisogno di qualche consiglio nel seguente questione:SCons o CMake invece di qmake

Ho un progetto QT, che è attualmente impostato per funzionare bene con qmake. Tuttavia, a causa delle espansioni dei requisiti e delle future direzioni del progetto, ho bisogno di cambiare il sistema di costruzione di esso, poiché l'applicazione richiederà alcuni cambiamenti nel modo in cui sarà realizzata.

In questo momento ogni file sorgente è compilato in un file eseguibile piuttosto grande, questo è impacchettato (manualmente) e inviato all'area di download. Va tutto bene.

Ma la direzione che sto cercando è di modulare l'applicazione in modo che ogni "funzione" venga compilata in una libreria condivisa e l'utente (sviluppatore) sia in grado di scegliere i componenti che desidera compilare. Queste "caratteristiche" sono collocate nelle directory nell'albero dei sorgenti (ad esempio: query_builder, reverse_engineer, mysql_DB_support, version_managemen directories, ecc ...) e quando l'utente crea l'applicazione dice semplicemente al sistema di compilazione di compilare un'applicazione con il generatore di query e mysql, ma nessun reverse engineering e in questo caso il sistema di compilazione aggiunge i file sorgente dalla directory specificata e crea una lib da esso.

devo anche altri requisiti, quali:

  • finestre costruire, Linux costruire
  • opzionalmente pacchetto build (deb, rpm)
  • sostegno QT e possibilmente QT5
  • più eseguibili (GUI client, client CLI)

Dopo alcune "ricerche di mercato" ho finito con CMake e SCons come due possibili sy steli che potrei usare. Ho una certa esperienza di CMake e alcune esperienze con Python, ma non ancora SCons.

Ma non so quale sia il migliore per il mio caso, questo è il posto dove ho bisogno del vostro aiuto. Potresti elaborare quale dovrei usare? E se consideri che i miei requisiti siano realizzabili con qmake, ti prego di farmelo sapere,

Cheers, f.

+1

Raccomando CMake per questo.Funziona alla grande con Qt su Windows (l'ho usato dal 2008 fondamentalmente per ogni progetto al lavoro e a casa) e Linux e supporta componenti opzionali come descrivi tu. Anche se con quello detto non uso scons quindi non posso confrontare. – drescherjm

risposta

7

Non esiste una risposta corretta a questa domanda, e di solito si riduce a preferenze personali, tipo-di come vi contro emacs (la risposta corretta è VI, ovviamente :)

Si dovrebbe studiare i pro e contro di ciascuno e valutare come quelli si adattano con le vostre esigenze e necessità.

Sono parziale a SCons, principalmente perché non sopporto la sintassi di CMake, ma questa è una preferenza personale.Qui ci sono alcuni pro e contro di ciascuno come la vedo io:

CMake

Pro:

  • Simile a QMake, considerando che è un generatore di makefile
  • CMake è ampiamente utilizzato, quindi c'è un sacco di riferimenti e aiuto disponibile
  • Ha una GUI (non lo so da solo , Sulla base di Calvin1602 commenti qui sotto)

Contro:

  • CMake ha la sua sintassi propria, inventato, che molti si sentono (me compreso) non è intuitivo.
  • 2 processo di compilazione passo, prima creare il Makefile, poi effettivamente eseguire la compilazione
  • La sua quasi impossibile leggere il Makefile generato

SCons

Pro:

  • La sintassi è P ython, che è ampiamente usato e relativamente facile da imparare. (e Python è cool :)
  • Il processo di compilazione è un passo, basta eseguire SCons e compila. Nessun file di build intermedio da generare o mantenere.
  • In passato SCons era più lento di CMake, ma da allora è molto più veloce, probabilmente più veloce o più veloce di CMake poiché non deve generare makefile.
  • Ricco set di funzionalità, e molte lingue supportate, mentre CMake è focalizzata verso C/C++
  • Molto preciso, sistema di dipendenze implicita: non c'è bisogno di elencare esplicitamente le intestazioni dipendenti, biblioteche, ecc dipendenze espliciti possono essere specificate, se necessario.
  • È disponibile un plug-in di eclissi. Eclipse ha anche plugin disponibili per Python.
  • Ha gli strumenti creati per i progetti Qt per gestire MOC e altri codegen correlati come menzionato here.

Contro:

  • SCons potrebbe non essere così ampiamente usati come CMake, ma c'è ancora un sacco di supporto disponibile.
  • A seconda della dimensione del progetto, SCons può utilizzare un sacco di memoria, poiché analizza tutti gli script di compilazione e crea un albero delle dipendenze in memoria prima di compilare effettivamente qualsiasi cosa. Ciò tuttavia consente un controllo delle dipendenze più accurato.
+0

Aggiungo che CMake ha una GUI fantastica in cui è possibile selezionare le parti da compilare. – Calvin1602

+0

@ Calvin1602 Non lo sapevo. La parte GUI di CMake è un'applicazione aggiuntiva? Quella GUI funziona sia su Windows che su Linux? – Brady

+0

Fa parte di CMake. Da Linux, esegui cmake-gui. Da Windows e Mac, fai clic sull'icona =). C'è anche ccmake, l'equivalente della riga di comando della gui. Da qui puoi impostare qualsiasi variabile di qualsiasi tipo (sono dichiarate nel CMakeLists.txt) – Calvin1602