qt genera un file de cabecera que contiene hash git en time de compilation y fuerza a rebuild usando files

Descubrí cómo generar macro de definición que contiene git hash en time de compilation:

DEFINES += GIT_CURRENT_SHA1="\\\"$(shell git -C \""$$_PRO_FILE_PWD_"\" describe)\\\"" 

El problema es que cuando se cambia el hash git, los files (mainwindow.cpp que están agregando text al dialog aproximado) que están usando el GIT_CURRENT_SHA1 no se reconstruyen automáticamente (obviamente) ..

Me gustaría generar un file de encabezado en time de compilation que contenga git hash como en const char * git_hash = "git-hash-etc-etc";

Y este file de encabezado lo includeía en mainwindow.cpp y espero que sea recomstackdo cuando el encabezado cambie …

Mi pregunta es principalmente qué agregar al file .pro para generar dicho file desde Makefile.

Gracias.

Solo por la evidencia de este script que utilicé para la versión de git en Linux:

 #!/bin/bash echo "Generating header for git hash" $1 $2 GIT_HEADER="$1/$2" if [ -z "$2" ]; then GIT_HEADER="$1/git_version.h" fi GIT_VERSION="`git -C \"$1\" describe`" if grep --quiet $GIT_VERSION $GIT_HEADER; then echo "No need to generate new $GIT_HEADER - git hash is unchanged" exit 0; fi echo "git version is:" $GIT_VERSION echo "#ifndef GIT_VERSION_H" > $GIT_HEADER echo "#define GIT_VERSION_H" >> $GIT_HEADER echo "" >> $GIT_HEADER echo "#define GIT_CURRENT_SHA1 \"$GIT_VERSION\"" >> $GIT_HEADER echo "#endif //GIT_VERSION_H" >> $GIT_HEADER echo "file is generated into" $GIT_HEADER 

Y en .pro:

 GITVERSION = git_version.h versiontarget.target = $$GITVERSION versiontarget.commands = '$$PWD/git_version.sh \"$$PWD\" $$GITVERSION' versiontarget.depends = FORCE PRE_TARGETDEPS += $$GITVERSION QMAKE_EXTRA_TARGETS += versiontarget 

Agregamos commands al file .pro para llamar a un file de process por lotes y crear un file de encabezado con la versión actual de svn:

.Pro:

 SVNVERSION = Main/svnversion.h versiontarget.target = $$SVNVERSION versiontarget.commands = '$$PWD/svnversion.bat $$PWD' versiontarget.depends = FORCE PRE_TARGETDEPS += $$SVNVERSION QMAKE_EXTRA_TARGETS += versiontarget SOURCES += ... \ Main/svnversion.h 

file de cabecera creado:

 #ifndef SVNVERSION_H #define SVNVERSION_H #define SVN_VERSION 2763 #endif // SVNVERSION_H 

file por lotes:

 @echo off set OLDDIR=%CD% cd %1 echo old %OLDDIR% arg %1 echo SVN Version: Begin svn.exe info > svnversion.tmp if %ERRORLEVEL% == 0 ( echo SVN Version: Insert svn info | findstr /B "Revision: " > svnversion.tmp FOR /F "tokens=2 delims= " %%G IN (svnversion.tmp) DO ( echo #ifndef SVNVERSION_H > Main\svnversion.h echo #define SVNVERSION_H >> Main\svnversion.h echo. >> Main\svnversion.h echo #define SVN_VERSION %%G >> Main\svnversion.h echo. >> Main\svnversion.h echo #endif // SVNVERSION_H >> Main\svnversion.h ) ) else ( echo SVN Version: Default echo #ifndef SVNVERSION_H > Main\svnversion.h echo #define SVNVERSION_H >> Main\svnversion.h echo. >> Main\svnversion.h echo #define SVN_VERSION -1 >> Main\svnversion.h echo. >> Main\svnversion.h echo #endif // SVNVERSION_H >> Main\svnversion.h ) cd %OLDDIR% echo SVN Version: Finish