Pregunta

Mi flujo de trabajo actual:

  1. hg update (o cualquier cosa que uno utiliza para comprobar a cabo una revisión)
  2. MyProject.pro qmake MyProject.vcproj
  3. Abra Visual Studio, editar archivos
  4. Crear proyecto

Durante la etapa de construcción, ¿cómo puedo actualizar el archivo de cabecera config.h con la información del sistema de control de versiones (por ejemplo, hg id )?

MyProject.vcproj es generado por qmake , por lo que no debería editarlo a mano.

¿Fue útil?

Solución

Puede ejecutar comandos externos desde el interior qmake. La manera más fácil de hacer que la información disponible en las fuentes sería el uso de una definición:

HGID = $$system(hg id)
DEFINES += HGID=\\\"$$HGID\\\"

No estoy seguro de si se puede editar un archivo externo de qmake. Se podría utilizar una herramienta externa, pero en Windows que normalmente no tienen cosas como sed, por lo que podría ser un poco más problemática.

Otros consejos

Usted puede lograr que el uso de un objetivo de generación personalizada y la palabra clave PRE_TARGETDEPS. Suponiendo config.h.in tiene el formato folowing:

#define HGID $HGID

Se puede definir un objetivo de generación personalizada que procesará hgid.h.in y la salida a hgid.h antes de la construcción de su principal objetivo de la siguiente manera:

hgid.target = hgid
hgid.commands = sed s/\\\$$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid

Una opton es permitir que el rel="nofollow palabra clave Extensión . Poner algo como esto en su hgrc (o Mercurial.ini si ese es su cosa):

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

A continuación, poner en config.hy:

#define HGREV "$HGREV$"

Es posible que tenga que analizar el valor hexadecimal de la "HGREV $: $ deadbeefdeadbeef". Que obtendrá, pero eso es fácil de hacer por cualquier código que está accediendo al HGREV definir

Además de Lukáš Lalinský y comentario de goodrone, me gustaría mencionar que qmake puede enlazar directamente con el guión, no sólo a su salida. Por lo tanto se puede decir

DEFINES += REPO_ID=\\\"`./setlocalversion.sh`\\\"

y el guión será recién ejecutado para cada objetivo individual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top