2010-02-12 12 views
8

Je voudrais savoir s'il existe un moyen d'intégrer des balises Mercurial dans mon code C/C++. Fondamentalement, je voudrais que la chaîne de tag, qui finira par être un numéro de version (major.minor.rev), soit automatiquement insérée dans un emplacement déterminé de mon code C comme une chaîne statique.Comment intégrer des balises Mercurial dans mon code C/C++?

L'objectif global est que l'application pourrait être interrogé au sujet de son numéro de version, lorsqu'il est exécuté avec dire un argument de ligne de commande « -v ». Toute approche alternative qui n'implique pas d'intégrer une étiquette Mercurial sera également la bienvenue.

J'utilise Code :: Blocks sur un environnement Linux, la solution ne peut pas compter sur les fonctionnalités de Visual Studio.

Répondre

0

Nous utilisons une macro pour cette

#define CVS(a) static const volatile char *rcsid = a; 

.... 
CVS("$Id$") 

CVS étend automagiquement $ Id $. Je suppose que c'est ce que les étiquettes Mercurial fonctionnent aussi bien.

Ensuite, nous pouvons utiliser les chaînes commande pour trouver la version exacte de chaque fichier dans l'exécutable/bibliothèque, etc.

Vous pouvez utiliser quelque chose de similaire.

static const volatile char *rcsid = "$Id"; //or whatever mercurial tag you want 

int main() { 

    ..... 
    std::cout << "Version is " << rcsid << std::endl; 
} 
+0

Si l'étiquette Id $ $ est arrivé d'avoir un chien errant '" 'dans ce que vous auriez du mal à vous pouvez essayer' #define CVS (a) const statique volatile char * rcsid = #Un;. \ ... \ CVS ($ Id $); 'à la place –

+0

@ Tim Schaeffer, bonne prise, j'ai posté de la mémoire Parfois, il n'y a pas de substitut pour le bon vieux copier/coller – Glen

+0

bien maintenant vous avez le problème de l'étiquette d'identification ayant une virgule. –

6

Vous aurez besoin du keyword extension pour permettre l'expansion des entrées de mots-clés, il est livré avec Mercurial.

Par exemple, pour obtenir un soutien pour $Id$ vous pouvez modifier hgrc pour vous repo (.hg/hgrc) et ajouter:

[extensions] 
keyword = 

[keyword] 
# Enable expansion for the specific files 
myfile.cpp = 
# Enable for all .h files 
**.h = 

Puis, utilisez

hg kwexpand 

pour étendre les mots clés les fichiers concernés ou

hg kwshrink 

à rétrécir les mots-clés. Vous pouvez même créer vos propres mots-clés en ajoutant l'entrée [keywordmaps], par ex.

[keywordmaps] 
User = {author|user} 

Remarque: Cela désactive les mots-clés BUILTIN

Plus de détails sur l'extension peuvent être trouvés in the wiki.