c makefile with shell命令和变量

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)