Per estendere la risposta di @sashang, evitando i problemi "$Id:$" menzionati da @cdunn2001, ...
Puoi aggiungere un file "version_info.h" al tuo progetto che contiene solo:
#define VERSION_MAJOR "1"
#define VERSION_MINOR "0"
#define VERSION_PATCH "0"
#define VERSION_BUILD "0"
E nel tuo file main.c c'è la riga:
static char version[] = VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD;
static char timestamp[] = __DATE__ " " __TIME__;
(o comunque tu voglia usare questi valori nel tuo programma)
Quindi imposta un passaggio di pre-compilazione che legge il file version_info.h, aumenta i numeri in modo appropriato e lo riscrive di nuovo. Una build giornaliera aumenterebbe solo il numero VERSION_BUILD, mentre una versione più seria aumenterebbe altri numeri.
Se il tuo makefile lo elenca nell'elenco dei prerequisiti del tuo oggetto, la build ricompilerà ciò di cui ha bisogno.
I compilatori Intel Fortran e C++ possono certamente farlo, usa -sox
opzione. Quindi, sì, c'è un modo. Non conosco alcuna convenzione diffusa per l'incorporamento di tali informazioni in un file binario e generalmente utilizzo Emacs in modalità esadecimale per leggere le informazioni incorporate, il che è piuttosto hacker.
'-sox' incorpora anche le opzioni del compilatore utilizzate per creare un eseguibile, il che è molto utile.
Un modo per farlo se usi cvs o subversion è avere una stringa id speciale formattata appositamente nel tuo file sorgente. Quindi aggiungi un hook pre-commit a cvs o svn che aggiorna quella variabile speciale con la nuova versione del file quando viene eseguito il commit di una modifica. Quindi, quando il binario è stato creato, puoi usare ident per estrarre quell'informazione. Ad esempio:
Aggiungi qualcosa di simile al tuo file cpp:
static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";
E l'esecuzione di ident (che puoi trovare installando rcs) sul programma dovrebbe mostrare le informazioni sui file che contengono una stringa id.
ident program
program:
$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $
Nota Come le persone hanno menzionato nei commenti, questa tecnica è arcaica. Avere il sistema di controllo del codice sorgente che modifica automaticamente il tuo codice sorgente è brutto e il fatto che il controllo del codice sorgente sia migliorato dai tempi in cui cvs era l'unica opzione significa che puoi trovare un modo migliore per raggiungere gli stessi obiettivi.