c makefile с командами оболочки и переменными - PullRequest
7 голосов
/ 04 февраля 2011

Это из скрипта bash, который я использовал для сборки программы:

dateString=$(date +%Y/%m/%d\ %H:%M:%S)
revision=(`svn info | grep Revision | tr -d [:alpha:]':'`)
echo "#define VERSION_DATE \"$dateString\""     >  version.h
echo "#define VERSION_REVISION \"$revision\""   >> version.h

Я перешел с использования build.sh на make-файл:

version.h:
    dateString=$$(date +%Y/%m/%d\ %H:%M:%S)
    revision=(`svn info | grep Revision | tr -d [:alpha:]':'`)
    echo "#define VERSION_DATE \"$dateString\""    >  version.h.tmp
    echo "#define VERSION_REVISION \"$revision\""  >> version.h.tmp
    mv version.h.tmp version.h

Но файл version.h заканчивается таким образом:

#define VERSION_DATE "\ateString"
#define VERSION_REVISION "\evision"

Кажется, я не могу правильно получить переменные оболочки. Я думаю, потому что они заканчивают тем, что были переменными Makefile. Если кто-нибудь знает, как это сделать, я не возражаю, зная, как. Большое спасибо.

1 Ответ

9 голосов
/ 04 февраля 2011

Помните, что каждая команда выполняется в своей собственной оболочке, поэтому dateString и revision будут сброшены в третьей и четвертой командах.

Таким образом, вы используете точки с запятой и обратную косую черту в конце каждой строки, чтобы сделать ее одной командой.Также вам нужно использовать $$ для ссылки на оболочку $.

. Или не используйте промежуточные переменные, тогда вам не нужно, чтобы это была одна команда.Как то так:

version.h:
    echo \#define VERSION_DATE \"$$(date +%Y/%m/%d\ %H:%M:%S)\" >  version.h.tmp
    echo \#define VERSION_REVISION \"$$(svn info | grep Revision | tr -d [:alpha:]:)\" >> version.h.tmp
    mv version.h.tmp version.h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...