Haciéndose eco de la misma línea en un Makefile

Estoy intentando crear un file version.c para GIT usando git describe en Windows XP. Para esto estoy llamando git describe en mi file MAKE de la siguiente manera:

@echo #include "version.h" > $(path)/version.c @echo const char * build_ver = ^" >> $(path)/version.c git describe >> $(path)/version.c 

Mi problema es que no he podido usar echo para imprimir en la misma línea, así puedo get algo como: const char * build_ver = "v1.1-4-g00a6d8f"

He visto otras forms de get el número de versión de git, pero el uso de awk o perl no es realmente una opción, ya que no puedo suponer que se instalarán en un sistema en particular.

Intenté asignarlo a una variable pero se queja de createProcess.

Agradecería cualquier ayuda.

Ver man 1 echo : probablemente estés buscando el -n .

Si tu eco no es compatible con eso, testing printf .

EDITAR: ya que ninguno de los dos parece estar disponible para usted, intente hacer eco de todo en la misma línea; algo como:

 echo 'const char *build_ver = "' `git describe` '";' 

EDIT 2: makefile de muestra que funciona en Linux / GNU make:

$ cat foo.make

 build: @echo 'const char *build_ver = "'`git describe`'";' 

$ make -f foo.make
const char * build_ver = "2008.07.01-102166-1620-g89db338";

Aquí hay un ejemplo de código que uso que de manera similar crea un file ac para usted con el time de compilation y la versión de git. Esto también incluye el truco para get la salida "git describe" en una variable de file bat.

 :: vss1_version.bat :: This batch file will create a version c file that :: will contain the build date and time along with :: version information extracted from GIT. :: This file expects git to be installed and excessable :: from the path if "%1" NEQ "" goto deploy echo usage: vss1_version [filename] echo ie vss1_version .\deploy\vss1\VSS1_VERSION.c exit /b 1 :deploy set VSS1_VERSION_FILENAME=%1 :: Delete the current file. rm -f -v %VSS1_VERSION_FILENAME% :: Get time and day nicely formatted set current_time=%time% set ver_hour=%current_time:~0,2% if "%ver_hour:~0,1%" == " " set ver_hour=0%ver_hour:~1,1% set ver_min=%current_time:~3,2% if "%ver_min:~0,1%" == " " set ver_min=0%ver_min:~1,1% set ver_secs=%current_time:~6,2% if "%ver_secs:~0,1%" == " " set ver_secs=0%ver_secs:~1,1% set current_date=%date% set ver_year=%current_date:~-4% set ver_month=%current_date:~4,2% if "%ver_month:~0,1%" == " " set ver_month=0%ver_month:~1,1% set ver_day=%current_date:~7,2% if "%ver_day:~0,1%" == " " set ver_day=0%ver_day:~1,1% set datetimef=%ver_year%/%ver_month%/%ver_day%-%ver_hour%:%ver_min%:%ver_secs% :: Format the date in YYYY\MM\DD-HH:MM:SS.ss echo const char * build_time = ^"%datetimef%^" ; >> %VSS1_VERSION_FILENAME% :: Get the output from a program into a local variable fo reuse later :: Get the "git describe" information into a local variable GITVERSION FOR /F "tokens=*" %%i in ('git describe --dirt^=*') do SET GITVERSION=%%i :: Put the git version information into the file echo const char * build_ver = ^"%GITVERSION%^" ; >> %VSS1_VERSION_FILENAME% echo Created %VSS1_VERSION_FILENAME% echo %datetimef% echo %GITVERSION% set VSS1_VERSION_FILENAME= set GITVERSION= set ver_hour= set ver_min= set ver_secs= set ver_year= set ver_month= set ver_day= set datetimef= set current_time= set current_date= :: Make sure we exit cleanly to the calling batch script will continue exit /b 1