Normalmente, per i numeri di versione maggiore e minore (come in 1.2, 1 è maggiore e 2 è minore), sono più spesso scritti direttamente nel codice, di solito come #define
(poiché potresti averne bisogno per le compilazioni condizionali, ad esempio #if
blocchi).
In genere avresti un'intestazione separata che contiene solo quelle definizioni 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 della versione (git, svn, cvs, ecc.) e poi inseriscono quel numero di versione nella loro intestazione "versione". Oppure, inseriscono il numero di versione nei file di configurazione del sistema di compilazione e poi lo inseriscono nell'intestazione, come mostrato nel tutorial di cmake. Personalmente, non mi piace questo approccio perché tende a modificare troppo spesso i tuoi file di intestazione e causa ricompilazioni frequenti e inutili.
Preferisco scrivere il numero di versione nel file di intestazione e quindi estrarre quei numeri di versione (maggiore, minore, ..) dall'intestazione nel sistema di compilazione. Questa è un'altra cosa che cmake può fare molto facilmente.
Se desideri incorporare un numero di versione giornaliero nel tuo software, ad esempio un numero di build o un numero di revisione, non dovresti inserirlo come #define
in un file di intestazione, ma piuttosto come extern const
variabile che definisci in un file cpp. Ad esempio, puoi usare cmake per estrarre un numero di revisione dal tuo sistema di controllo della versione, attaccarlo al file cpp che definisce questo extern const int revision;
variabile (tramite configure_file
di cmake function) e collega i tuoi programmi con quel file cpp / object. In questo modo, il numero di revisione viene incorporato automaticamente nei tuoi programmi ad ogni ricostruzione e non attiverà ricompilazioni complete ogni volta che viene aggiornato (ovvero ad ogni commit).
Il punto è che i numeri di versione principali e secondari non vengono modificati abbastanza frequentemente da richiedere alcun tipo di manutenzione automatica, ma è necessario scriverli manualmente in un solo posto e propagarli automaticamente ovunque dove potrebbe essere rilevante (lo consiglierei questo posto è il file di intestazione stesso). Sono solo i numeri di revisione o build che devono essere completamente automatizzati (generati dal controllo della versione e propagati ovunque automaticamente).
Credo sia consuetudine mantenere il numero di versione in un file di intestazione dedicato. Alcuni strumenti possono generarlo automaticamente per te.
Ad esempio, consulta la sezione "Aggiunta di un numero di versione e di un file di intestazione configurato" nel tutorial di CMake.