Повторяю ту же строку в Makefile - PullRequest
1 голос
/ 06 июля 2011

Я пытаюсь создать файл version.c для GIT, используя git description в Windows XP. Для этого я называю git опишите в моем make-файле следующее:

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

Моя проблема в том, что я не смог использовать echo для печати на одной строке, чтобы я мог получить что-то вроде: const char * build_ver = "v1.1-4-g00a6d8f"

Я видел несколько других способов получить номер версии из git, но использование awk или perl на самом деле не вариант, так как я не могу предположить, что они будут установлены в конкретной системе.

Я пытался присвоить его переменной, но он жалуется на createProcess.

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2012

Вот пример кода, который я использую, который аналогичным образом создает AC-файл для вас со временем сборки и версией git.Это также включает в себя прием, чтобы получить вывод «git description» в переменную 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 i.e. 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
0 голосов
/ 06 июля 2011

См. man 1 echo : вы, вероятно, ищете переключатель -n.

Если ваше эхо не поддерживает это, попробуйте printf .

РЕДАКТИРОВАТЬ: так как ни один из них не кажется вам доступным, попробуйте повторить все в одной строке;что-то вроде:

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

EDIT 2: пример make-файла, который работает в 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";

...