在GNU Make中连接值

时间:2015-04-17 21:49:30

标签: makefile gnu string-concatenation

在bash中,我可以轻松地连接多个值。

$ VERSION=0.1.$(date +%s)-$(git rev-parse --short HEAD)
$ echo $VERSION
0.1.1429307021-6206daa

如何在GNU Make中分配这样的值?字符串上的doc仅解决了简单的情况。

1 个答案:

答案 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将运行命令。