2014-12-10 17 views
9

Vorrei incorporare la versione del software nel mio codice e recuperarla successivamente dal programma binario con un comando come argomento -v o --version. A titolo di esempio alcuni dei binari di software GNU/Linux Print loro informazioni sulla versione a fonti di un argomento o di -v-V nella riga di comando prendere ls come esempio:modo corretto per codificare/incorporare il numero di versione nel codice di programma

$ ls --version 
ls (GNU coreutils) 8.13 
Copyright (C) 2011 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 

Esiste una convenzione, o standard fare questo? Ho provato a cercare queste informazioni ma, poiché non conoscevo la terminologia corretta, la mia ricerca ha avuto come risultato solo il controllo della versione. Il codice del software è scritto in linguaggio C++ se aiuta ad affrontare meglio il problema.

risposta

11

Normalmente, per maggiori e minori numeri di versione (come in, 1.2, 1 è maggiore e 2 è minore), sono spesso scritti nel codice direttamente, di solito come #define (perché potrebbero essere necessari per le compilazioni condizionali, ovvero i blocchi #if).

In genere si dispone di un'intestazione separata che contiene solo quelle definite e nient'altro (tranne la protezione dell'intestazione), per ridurre al minimo le dipendenze.

Alcune persone usano il sistema di compilazione (come cmake) per estrarre un numero di versione dal controllo di versione (git, svn, cvs, ecc.) E quindi inserire il numero di versione nella loro intestazione "versione". Oppure, inseriscono il numero di versione nei file di configurazione del sistema di build e lo inseriscono nell'intestazione, come mostrato nello cmake tutorial. Personalmente, non mi piace questo approccio perché tende a modificare i file di intestazione troppo spesso e causare ricompense frequenti e inutili.

Preferisco scrivere il numero di versione nel file di intestazione e quindi estrarre quei numeri di versione (maggiore, minore, ..) dall'intestazione sul sistema di generazione. Questa è un'altra cosa che può fare molto facilmente.

Se si desidera incorporare un numero di versione giorno per giorno nel software, ad esempio un numero di build o un numero di revisione, non è necessario inserirlo come #define in un file di intestazione, ma piuttosto come extern const variabile che si definisce in un file cpp. Ad esempio, è possibile utilizzare cmake per estrarre un numero di revisione dal proprio sistema di controllo versione, aggiungerlo al file cpp che definisce questa variabile extern const int revision; (tramite la funzione configure_file di cmake) e collegare i programmi con quel file cpp/oggetto. In questo modo, il numero di revisione è incorporato automaticamente nei tuoi programmi ad ogni ricostruzione e non attiverà ricompilazioni complete ogni volta che viene aggiornato (che è ad ogni commit).

Il punto è che i numeri di versione maggiore e minore non vengono modificati abbastanza frequentemente da richiedere alcun tipo di manutenzione automatica, ma è necessario scriverli manualmente in un unico posto e propagarlo automaticamente ovunque altrimenti potrebbe essere rilevante (Vorrei raccomandare che questo posto sia il file di intestazione stesso). Sono solo i numeri di revisione o di compilazione che devono essere completamente automatizzati (generati dal controllo della versione e propagati in altro modo automaticamente).

+1

"Preferisco scrivere il numero di versione nel file di intestazione e quindi estrarre quei numeri di versione dall'intestazione sul sistema di generazione."Qualche possibilità che potresti espandere su come hai fatto a fare questo CMake? – Mohan

2

Credo che sia consuetudine mantenere il numero di versione in un file di intestazione dedicato. Alcuni strumenti possono autogenerarlo per te. Per esempio ecco come si fa con CMake: http://www.cmake.org/cmake-tutorial/ vedere la sezione "Aggiunta di un numero di versione e configurato intestazione del file"

+0

Questa opzione è ottima, ma mi chiedo se c'è un modo per farlo senza che CMake sovrascriva alcun file. – rien333

Problemi correlati