2011-03-11 21 views
6

Vorrei che la mia applicazione Qt/C++ sapesse di quale versione si tratta. Dovrebbe sapere che non da alcuni file di configurazione, ma con il numero di versione compilato nel binario dell'applicazione. Una versione stessa è una stringa come "XYZ", dove X è un numero di versione principale, Y è un numero di versione minore e Z è una revisione sotto SVN (o un numero di revisione sotto SVN meno un numero di revisione quando è uscita la versione "XY0"). Quale pensi che sia il modo più semplice per farlo con gli scons?Le migliori pratiche per gestire le versioni con scons?

+1

Se l'unico scopo del numero di versione è quello di visualizzare qualcosa per l'utente, una stringa è OK. Se è presente un accesso programmatico, è necessario disporre di ciascuno dei componenti della versione in un campo separato (consultare http://stackoverflow.com/questions/2195573/why-use-a-nested-ruby-module-for-version- informazioni/2195824 # 2195824). Inoltre, per semplificare l'automatizzazione degli incrementi di versione (ad esempio per uno script di build di rilascio), separare la versione in campi è una vittoria. –

risposta

8

SCons ha Substfile e Textfile builder per la generazione di file. Quindi creare una funzione per calcolare la versione (usando o chiamando il comando svn) e scrivere il suo output su un file usando Substfile (prende template da un file) o Textfile (scrive solo contenuto fornito). Compilare e collegare il file con il resto dell'applicazione.

Il file deve essere un file sorgente (non un'intestazione) con contenuti quali (supponendo C/C++, ma la stessa tecnica sarebbe appropriato con qualsiasi lingua):

char *VERSION = "X.Y.Z"; 

(e qualsiasi altra formati alternativi che si desidera) e dichiarare

extern char *VERSION; 

da qualche parte, che solo il un file verrà ricompilato più l'applicazione ricollegato (che lo farà in ogni caso, perché alcune altre fonti probabilmente cambiato troppo, a destra).

+1

+1. Mettere i valori della versione in un file sorgente è una buona idea. Trovo utile creare un'intestazione (che non debba essere modificata) con funzioni accessorie per 1. la stringa di versione e 2. una struttura di versioni con campi separati per i valori maggiore, minore, ecc. –

+0

Grazie per la risposta, vado con questo. Mi dispiace per essere così lento ad accettare. – Septagram

+0

Inoltre, @Dave, giusto sei. – Septagram

1

Ecco altre risposte provenienti dalla mailing list [scons-users].

Brian Cody:

Una possibilità riga di comando si passa in scons è la versione repository di SVN rep. Abbiamo quindi inserito questo numero in a define (-DREP_NUM = \ "123 \") e creare una stringa nel nostro codice C++ che utilizza questo numero. Questo è per il nostro server eseguito build . Per costruisce locali, abbiamo effettivamente utilizziamo il nome utente al posto del numero di versione, perché qualcuno è accumulo locale della versione XYZ non necessariamente uguale di qualcun altro XYZ (in Windows, l'env var USERNAME contiene l'utente connesso). Uno altra considerazione è che la modifica di qualsiasi parte di una compilazione in scn significa che il target è automaticamente non aggiornato. Per risolvere questo problema, il nostro sistema di build preleva il target di un oggetto a cui importa effettivamente i flag e che passa solo i flag alla compilazione di quell'unico oggetto.

Buona fortuna

Gary Oberbrunner:

Vorrei che il mio Qt/C++ applicazione per sapere quale versione si tratta.

C'è qualche info in http://www.scons.org/wiki/BuildNumberProcessing che può essere utile.

- - Gary

Problemi correlati