2012-05-13 8 views
14

otrzymali listę rozdzielonych dwukropkami ścieżek, coraz listę oddzielonych znakiem spacji z GNU make jest prosta:GNU make Konwersja spacji aby Dwukropki

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

Jednak nie mogłem znaleźć dobry sposób, aby idź w przeciwnym kierunku. Następujący hack działa (przynajmniej jeśli sed jest zainstalowany), ale jestem pewien, że będzie lepszy sposób na rozwiązanie tego problemu przy użyciu tylko wewnętrznych funkcji Make.

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

Odpowiedz

14

Jedynym Najtrudniejszą częścią tutaj jest zdefiniowanie dosłownego miejsca:

space := 
space += 

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

wolę używać 'pusty: =' 'następnie przestrzeń: = $ (pusty) $ (pusty)'. Tylko odrobinę wyraźniejsze i nie polegające na efektach ubocznych. Ale oba będą działać. – MadScientist

+0

Fajnie, dzięki. Myślę, że użyję 'SPACE: = $ (eval) $ (eval)', aby uzyskać token miejsca. Myślałem, że 'subst' działa indywidualnie na słowa i dlatego nie widzi spacji między nimi. – 5gon12eder

+3

Inną opcją jest użycie 'space: = $ (subst ,,)'. –

Powiązane problemy