In meinem Programm halte ich die Git-Versionsnummer und das Datum des Builds in einer separaten Datei namens " version.c
, die folgendermaßen aussieht:
#include "version.h"
const char * build_date = "2009-11-10 11:09";
const char * build_git_sha = "6b54ea36e92d4907aba8b3fade7f2d58a921b6cd";
Es gibt auch eine Header-Datei, die so aussieht:
#ifndef VERSION_H
#define VERSION_H
extern const char * build_date; /* 2009-11-10 11:09 */
extern const char * build_git_sha; /* 6b54ea36e92d4907aba8b3fade7f2d58a921b6cd */
#endif /* VERSION_H */
Sowohl die Header-Datei als auch die C-Datei werden von einem Perl-Skript generiert, das folgendermaßen aussieht:
my $git_sha = `git rev-parse HEAD`;
$git_sha =~ s/\s+//g;
# This contains all the build variables.
my %build;
$build{date} = make_date_time ();
$build{git_sha} = $git_sha;
hash_to_c_file ("version.c", \%build, "build_");
Hier hash_to_c_file
erledigt man die ganze Arbeit des Erstellens version.c
und version.h
und make_date_time
macht einen String wie gezeigt.
Im Hauptprogramm habe ich eine Routine
#include "version.h"
// The name of this program.
const char * program_name = "magikruiser";
// The version of this program.
const char * version = "0.010";
/* Print an ID stamp for the program. */
static void _program_id_stamp (FILE * output)
{
fprintf (output, "%s / %s / %s / %s\n",
program_name, version,
build_date, build_git_sha);
}
Ich kenne mich mit Git nicht so gut aus, daher würde ich Kommentare begrüßen, wenn es einen besseren Weg gibt, dies zu tun.