在bash中,我可以轻松地连接多个值。
$ VERSION=0.1.$(date +%s)-$(git rev-parse --short HEAD)
$ echo $VERSION
0.1.1429307021-6206daa
如何在GNU Make中分配这样的值?字符串上的doc仅解决了简单的情况。
答案 0 :(得分:1)
最简单的选择是使用make的shell
function来运行shell命令,如下所示:
VERSION := 0.1.$(shell date +%s)-$(shell git rev-parse --short HEAD)
这与shell的反引号或$()
功能类似。
Makefile与shell脚本的语法不同,因此不能总是使用未修改的shell语法。特别是,$
字符是特殊的,因此在配方中的任何地方使用美元符号都必须将其从make中转义,以便将其传递给shell。如果你想使用纯shell解决方案而不是make函数,你可以在命令行中使用旧式反引号:
VERSION := 0.1.`date +%s`-`git rev-parse --short HEAD`
如果您想使用新的$()
语法,则必须escape the $
这样:
VERSION := 0.1.$$(date +%s)-$$(git rev-parse --short HEAD)
请注意,第一个解决方案(使用make函数)和后两个解决方案之间存在更深层次的差异:在第一个make中运行命令本身并在内部查看变量的实际值。在后两者中,make的VERSION
变量的值只是包含shell命令的字符串,这些命令会传递给配方中的shell,而shell将运行命令。