Pour étendre la réponse @sashang, tout en évitant les problèmes "$Id:$" mentionnés par @cdunn2001, ...
Vous pouvez ajouter un fichier "version_info.h" à votre projet qui n'a que :
#define VERSION_MAJOR "1"
#define VERSION_MINOR "0"
#define VERSION_PATCH "0"
#define VERSION_BUILD "0"
Et dans votre fichier main.c, ayez la ligne :
static char version[] = VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD;
static char timestamp[] = __DATE__ " " __TIME__;
(ou quelle que soit la manière dont vous souhaitez utiliser ces valeurs dans votre programme)
Ensuite, configurez une étape de pré-construction qui lit le fichier version_info.h, augmente les nombres de manière appropriée et l'écrit à nouveau. Une version quotidienne augmenterait simplement le nombre VERSION_BUILD, tandis qu'une version plus sérieuse augmenterait d'autres nombres.
Si votre makefile le répertorie dans la liste des prérequis de votre objet, la construction recompilera ce dont elle a besoin.
Les compilateurs Intel Fortran et C++ peuvent certainement le faire, utilisez le -sox
option. Donc, oui, il y a un moyen. Je ne connais aucune convention répandue pour intégrer de telles informations dans un binaire et j'utilise généralement Emacs en mode hexadécimal pour lire les informations intégrées, ce qui est assez hackish.
'-sox' intègre également les options du compilateur utilisées pour construire un exécutable, ce qui est très utile.
Une façon de le faire si vous utilisez cvs ou subversion est d'avoir une chaîne d'identification spéciale formatée spécialement dans votre fichier source. Ajoutez ensuite un hook de pré-commit à cvs ou svn qui met à jour cette variable spéciale avec la nouvelle version du fichier lorsqu'une modification est validée. Ensuite, lorsque le binaire est construit, vous pouvez utiliser ident pour extraire ces informations. Par exemple :
Ajoutez quelque chose comme ceci à votre fichier cpp :
static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";
Et exécuter ident (que vous pouvez trouver en installant rcs) sur le programme devrait afficher les informations sur les fichiers contenant une chaîne d'identification.
ident program
program:
$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $
Remarque Comme les gens l'ont mentionné dans les commentaires, cette technique est archaïque. Faire en sorte que le système de contrôle des sources modifie automatiquement votre code source est moche et le fait que le contrôle des sources se soit amélioré depuis l'époque où cvs était la seule option signifie que vous pouvez trouver un meilleur moyen d'atteindre les mêmes objectifs.