0
在bash中,我可以輕鬆地連接多個值。GNU Make中的concatenate值
$ VERSION=0.1.$(date +%s)-$(git rev-parse --short HEAD)
$ echo $VERSION
0.1.1429307021-6206daa
如何在GNU Make中指定一個像這樣的值?字符串上的doc僅適用於簡單情況。
在bash中,我可以輕鬆地連接多個值。GNU Make中的concatenate值
$ 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)
這同樣適用於外殼的反引號或$()
功能。
Makefile與shell腳本有不同的語法,因此您不能始終使用未經修改的shell語法。特別是$
這個字符是特殊的,所以在使用美元符號的配方中的任何地方都必須將它從make中轉義出來,這樣它纔會被傳遞到shell。如果你想使用純外殼解決方案,而不是讓功能,您可以在命令行中使用老派反引號:
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將運行這些命令。
這樣做。儘管誇張,但謝謝你的回答。爲了永久的緣故,我會調低音量。 – jeremyjjbrown