2011-02-03 177 views
7

这是一个bash脚本我用来建立一个程序:Ç的makefile与shell命令和变量

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来一个makefile改变:

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" 

我似乎无法正确获取shell变量。我认为它是因为它们最终成为了Makefile vars。如果有人知道如何去做,我不会介意如何去做。非常感谢。

回答

9

请记住,每个命令都在其自己的shell中运行,因此dateString和revision将在第三个和第四个命令中取消设置。

所以你在每一行的末尾使用分号和反斜杠来使它成为一个命令。你也需要使用$$来引用shell的$。

或者不使用中间变量,那么你不需要它是一个命令。这样的事情:

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 
+0

非常好,那已经完成了工作,谢谢你。谢谢Paul的回复。 – 2011-02-03 23:19:56