2015-04-17 61 views
0

在bash中,我可以輕鬆地連接多個值。GNU Make中的concatenate值

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

如何在GNU Make中指定一個像這樣的值?字符串上的doc僅適用於簡單情況。

回答

1

最簡單的方法是使用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將運行這些命令。

+0

這樣做。儘管誇張,但謝謝你的回答。爲了永久的緣故,我會調低音量。 – jeremyjjbrown