c makefile with shell命令和变量

时间:2011-02-03 21:39:56

标签: c bash shell variables 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

我从使用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。如果有人知道怎么做,我不介意知道如何做。非常感谢。

1 个答案:

答案 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