2012-05-13 86 views
14

鉴于路径的冒号分隔的列表,掌握GNU空格分隔的列表中进行很简单:GNU做转换空间,以冒号

CPATHS := /usr/bin/foo:/usr/bin/baz:/usr/bin/baz 
SPATHS := $(subst :, ,$(CPATHS)) 

但是,我无法找到一个很好的方式,走相反的方向。下面的技巧不工作(至少如果sed的安装),但我敢肯定会有解决这个只是用的内部功能的更好的方式。

SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz 
CPATHS := $(shell echo $(SPATHS) > tmp; sed 's/ \+/:/g' tmp; rm tmp) 

回答

14

这里唯一棘手的部分是定义一个字面上的空格:

space := 
space += 

SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz 
CPATHS := $(subst $(space),:,$(SPATHS)) 
+7

我更愿意用'空:=''然后空间:= $(空)$(空)'​​。只是更清楚一点,不依赖于副作用。但两者都可以。 – MadScientist

+0

很酷,谢谢。我想我会使用'SPACE:= $(eval)$(eval)'来获得一个空间标记。我以为'subst'是单独操作单词,因此看不到它们之间的空格。 – 5gon12eder

+3

另一种选择是使用'space:= $​​(subst ,,)'。 –