2010-02-12 9 views
8

Me gustaría saber si hay una forma de insertar etiquetas Mercurial en mi código C/C++.¿Cómo incrusto etiquetas Mercurial en mi código C/C++?

Básicamente me gustaría que la cadena de etiquetas, que terminará siendo un número de versión (major.minor.rev), se inserte automáticamente en una ubicación determinada de mi código C como una cadena estática.

El objetivo general es que la aplicación podría ser consultada sobre su número de versión cuando se ejecuta con un argumento de línea de comando '-v'. Cualquier enfoque alternativo que no implique tratar de insertar una etiqueta Mercurial también será bienvenido como respuesta.

Estoy usando Code :: Blocks en un entorno Linux, por lo que la solución no puede depender de las características de Visual Studio.

Respuesta

0

se utiliza una macro para este

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

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

CVS automagicamente expande $ Id $. Supongo que esto es lo que las etiquetas mercuriales también funcionan.

Entonces podemos usar las cadenas de comandos para encontrar la versión exacta de cada archivo en el ejecutable/biblioteca, etc.

Usted podría utilizar algo similar.

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

int main() { 

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

Si la etiqueta $ Id $ tiene un '' 'extraviado, podría tener problemas. Puede intentar' #define CVS (a) static const volatile char * rcsid = #a; \ ... \ CVS ($ Id $); 'en su lugar. –

+0

@Tim Schaeffer, buen truco, publiqué desde la memoria. A veces no hay sustituto para el viejo copy/paste – Glen

+0

y ahora tienes el problema de que la etiqueta Id contenga una coma. –

6

Necesitará el keyword extension para permitir la expansión de entradas de palabras clave, que se incluye con mercurial.

Por ejemplo, para obtener apoyo para $Id$ puedes editarla hgrc para usted Repo (.hg/hgrc) y añadir:

[extensions] 
keyword = 

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

A continuación, ejecute

hg kwexpand 

para expandir palabras clave correspondientes ficheros, o

hg kwshrink 

para reducir las palabras clave. Incluso puede crear sus propias palabras clave agregando la entrada [keywordmaps], p.

[keywordmaps] 
User = {author|user} 

Nota: Esto desactiva las palabras clave incorporadas

Más detalles sobre la extensión se pueden encontrar in the wiki.

Cuestiones relacionadas