Pau*_*sey 7 c variables bash shell makefile
这是我用来构建程序的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
Run Code Online (Sandbox Code Playgroud)
我从使用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
Run Code Online (Sandbox Code Playgroud)
但是version.h文件最终结束:
#define VERSION_DATE "\ateString"
#define VERSION_REVISION "\evision"
Run Code Online (Sandbox Code Playgroud)
我似乎无法正确获取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
Run Code Online (Sandbox Code Playgroud)