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