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).
fonte
2014-12-10 07:43:51
"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