2012-05-13 10 views
14

ein Doppelpunkt getrennte Liste von Pfaden gegeben, immer ein Leerzeichen getrennte Liste mit GNU Make ist einfach:GNU Convert Spaces Colons

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

aber ich konnte nicht einen schönen Weg finden, geh in die entgegengesetzte Richtung. Der folgende Hack funktioniert (zumindest, wenn sed ist installiert), aber ich bin mir ziemlich sicher, es wird eine schönere Möglichkeit, dies zu lösen nur mit machen 's interne Funktionen.

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

Antwort

14

Der einzige schwierige Teil hier ist einen wörtlichen Raum zu definieren:

space := 
space += 

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

Ich ziehe 'leer zu verwenden: =' 'dann Raum: = $ (leer) $ (leer)'. Nur ein bisschen klarer und nicht auf einen Nebeneffekt angewiesen. Aber beides wird funktionieren. – MadScientist

+0

Cool, danke. Ich denke, ich werde 'SPACE: = $ (eval) $ (eval)' verwenden, um ein Space-Token zu erhalten. Ich dachte, dass "subst" die Wörter einzeln anwendet und daher die Abstände zwischen ihnen nicht sieht. – 5gon12eder

+3

Eine andere Option ist die Verwendung von 'space: = $ (subst ,,)'. –