在 GNU Make 中连接值

concatentate values in GNU Make

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

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

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

最简单的选择是使用 make 的 shell function 来 运行 您的 shell 命令,如下所示:

VERSION := 0.1.$(shell date +%s)-$(shell git rev-parse --short HEAD)

这与 shell 的反引号或 $() 功能类似。

Makefile 的语法与 shell 脚本不同,因此您不能总是不加修改地使用 shell 语法。特别是,$ 字符对于 make 来说是特殊的,因此在配方中任何使用美元符号的地方,您都必须将其从 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 运行s 中,命令本身并在内部查看变量的实际值。在后两个中,make 的 VERSION 变量的值只是包含 shell 命令的字符串,make 传递给配方中的 shell,shell 将 运行 命令。