2012-05-13 63 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 ,,)'。 –