这是我用来构建程序的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更改为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。如果有人知道怎么做,我不介意知道如何做。非常感谢。
答案 0 :(得分: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