Incluir automáticamente el número de versión actual al comstackr

Al usar el código fuente, puede usar el command git describe para get el número de versión actual.

Cuando uso el binary, agregué una opción que permite a los usuarios pasar el indicador --version para get ese número de versión actual:

 if (argc >= 2) { if (argv[1] == "--version") { cout << "eval version v0.1-16-g74a9332"; } } 

El problema es que ese valor v0.1-16-g74a9332 ahora está codificado en mi fuente. Si me voy y cambio algo en otro lugar, tendré que incrementar este valor cada vez que me comprometa (¡lo cual es solo pedir conflictos de combinación!)

Además, la parte g74a9332 es el hash de la confirmación actual. Si cambio este valor en el código fuente, el hash de la confirmación cambia.

¿Hay alguna forma de que yo, en lugar de codificar el número de versión en el código, tenga c ++ "saber" que el número de versión es v0.1-16-g74a9332 cuando comstack el binary?

Genere el número de versión durante la construcción. Para eso, version.h un encabezado version.h con la statement de una variable global:

 // add include guards extern char const * const version_string; 

Para usar la cadena de versión, incluya ese encabezado y refiérase a esa variable global.

Para simplificar, cree también una plantilla para la definición correspondiente, version.c.template :

 char const * const version_string = "v0.1-COMMIT"; 

A continuación, agregue una regla a su file MAKE para comstackr el file de código fuente correspondiente con cadena en la definición de esa variable reemplazada por el número de confirmación real:

 COMMIT := $(shell git rev-parse --short HEAD) .PHONY: version.c version.c: version.c.template sed -e "s/COMMIT/$(COMMIT)/g" version.c.template > version.c 

Incluye esa version.c en el process de compilation y enlace.

Por supuesto, puede escalar eso para generar mucha información durante el time de compilation.

(Estoy en un dispositivo mobile y, por lo tanto, no probé el código anterior)


Dado que el comstackdor no sabe nada sobre cómo organiza su código fuente, no existe tal indicador.

Debes cambiar tu código ligeramente

 if (argc >= 2) { if (std::string(argv[1]) == "--version") { cout << MY_VERSION; } } 

Entonces, tu Makefile debe ser:

 result=$(shell git describe) all: g++ -DMY_VERSION=\"$(result)\" -o main main.cpp clean: rm -f main