2010-02-12 10 views
8

Vorrei sapere se esiste un modo per incorporare i tag Mercurial nel mio codice C/C++.Come si incorporano i tag Mercurial nel mio codice C/C++?

Fondamentalmente vorrei che la stringa di tag, che finirà per essere un numero di release (major.minor.rev), venga automaticamente inserita in una posizione determinata del mio codice C come una stringa statica.

L'obiettivo generale è che l'applicazione possa essere interrogata sul suo numero di versione quando viene eseguita con un argomento della riga di comando '-v'. Qualsiasi approccio alternativo che non implichi il tentativo di incorporare un tag Mercurial sarà accolto come risposta.

Sto usando Code :: Blocks su un ambiente Linux, quindi la soluzione non può fare affidamento sulle funzionalità di Visual Studio.

risposta

0

Usiamo una macro per questo

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

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

CVS automagically espande $ Id $. Presumo che questo sia quello che funzionano anche i tag mercuriali.

Poi possiamo usare le stringhe di comando per trovare l'esatta versione di ogni file nel file eseguibile/libreria ecc

Si potrebbe usare qualcosa di simile.

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

int main() { 

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

Se il tag $ Id $ ha avuto un "~" stray in esso avresti problemi. Potresti provare # # defini CVS (a) stat const volatile char * rcsid = #a; \ ... \ CVS ($ Id $); 'invece. –

+0

@Tim Schaeffer, buona cattura, ho postato dalla memoria.A volte non c'è alcun sostituto per il buon vecchio copia/incolla – Glen

+0

bene ora hai il problema del tag Id che contiene una virgola vagante. –

6

Sarà necessario il keyword extension per consentire l'espansione di voci di parole chiave, ma è fornito in bundle con mercuriale.

Per esempio per ottenere il supporto per $Id$ è possibile modificare hgrc per voi pronti contro termine (.hg/hgrc) e aggiungere:

[extensions] 
keyword = 

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

Quindi eseguire

hg kwexpand 

per espandere le parole chiave i file rilevanti, o

hg kwshrink 

per ridurre le parole chiave. Puoi persino creare le tue parole chiave aggiungendo la voce [keywordmaps], ad es.

[keywordmaps] 
User = {author|user} 

Nota: Questo disabilita le parole chiave incorporate

Maggiori dettagli sulla estensione possono essere trovati in the wiki.

Problemi correlati