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?
risposta
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. 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. –
Grazie per la risposta, vado con questo. Mi dispiace per essere così lento ad accettare. – Septagram
Inoltre, @Dave, giusto sei. – Septagram
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
- 1. migliori pratiche con le sessioni (Gorilla/sessioni)
- 2. Migliori pratiche .NET per le connessioni MongoDB?
- 3. Gulpfile.js guardano le migliori pratiche
- 4. Ansible migliori pratiche per copiare le directory
- 5. Le migliori pratiche per le connessioni mobili persistenti su Android?
- 6. Le migliori pratiche per aspettare un cambiamento con Selenium Webdriver?
- 7. Le migliori pratiche per il modello DAO?
- 8. Le migliori pratiche per l'API stored procedure?
- 9. Le migliori pratiche per l'utilizzo di window.onload
- 10. Le migliori pratiche per gestire le relazioni molti-a-molti in Elasticsearch?
- 11. Le migliori pratiche per le bozze di salvataggio automatico?
- 12. Le migliori pratiche per visualizzare le risorse nidificate in Rails?
- 13. Le migliori pratiche per i test di integrazione con Maven?
- 14. Quali sono le migliori pratiche per utilizzare AngularJS con Django
- 15. Le migliori pratiche per la versione dei servizi con WCF?
- 16. MVC 3 con le migliori pratiche per il rasoio
- 17. Le migliori pratiche SQLite su iPhone
- 18. Le migliori pratiche? iphone: sincronizzazione dati
- 19. PHP include le migliori pratiche sull'estensione file
- 20. Partecipanti reattivi a Meteor: le migliori pratiche?
- 21. Le migliori pratiche sull'uso asincrona/attendono
- 22. Quali sono le migliori pratiche MEF?
- 23. Email che invia le migliori pratiche?
- 24. Le migliori pratiche sulla associazione vuoto belongs_to
- 25. L'unità Sencha Touch prova le migliori pratiche?
- 26. Le migliori pratiche per l'aggiornamento degli argomenti di un frammento?
- 27. Quali sono le migliori pratiche per la codifica delle versioni di Docker Hub
- 28. Amazon MapReduce le migliori pratiche per l'analisi dei registri
- 29. pratiche consigliate per le interfacce delle versioni WebAPI
- 30. Le migliori pratiche quando si definiscono le variabili di istanza
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. –