2012-05-13 10 views
14

Dato un elenco del colon-delimitato di percorsi, ottenendo un elenco delimitato da spazi con GNU Make è semplice:GNU Make convertire gli ambienti, a due punti

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

Tuttavia, non sono riuscito a trovare un buon modo per andare nella direzione opposta. Il seguente hack funziona (almeno se è installato sed) ma sono abbastanza sicuro che ci sarà un modo migliore per risolvere questo problema usando solo le funzioni interne di Make .

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

risposta

14

L'unica parte difficile è quello di definire uno spazio letterale:

space := 
space += 

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

Io preferisco usare 'vuota: =' 'poi spazio: = $ (vuoto) $ (vuoto)'. Solo un po 'più chiaro e non si basa su un effetto collaterale. Ma entrambi funzioneranno. – MadScientist

+0

Cool, grazie. Penso che userò 'SPACE: = $ (eval) $ (eval)' per ottenere un token di spazio. Stavo pensando che 'subst' opera sulle parole individualmente e quindi non vede gli spazi tra loro. – 5gon12eder

+3

Un'altra opzione è usare 'spazio: = $ (subst ,,)'. –