2012-05-13 12 views
14

Dada una lista de colon delimitado de caminos, obteniendo una lista delimitada por espacios con GNU Make es sencillo:GNU Make convertir espacios a dos puntos

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

Sin embargo, no pude encontrar una buena manera de ir en la dirección opuesta. El siguiente hack no funciona (al menos si está instalado sed) pero estoy bastante seguro de que habrá una manera más agradable de resolver esto usando Funciones internas de.

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

Respuesta

14

La única parte difícil aquí es definir un espacio literal:

space := 
space += 

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

Yo prefiero usar 'vacío: =' 'continuación, el espacio: = $ (vacío) $ (vacío)'. Simplemente un poco más claro y no depende de un efecto secundario. Pero ambos funcionarán. – MadScientist

+0

Genial, gracias. Creo que usaré 'SPACE: = $ (eval) $ (eval)' para obtener un token de espacio. Estaba pensando que 'subst' opera en las palabras individualmente y por lo tanto no ve los espacios entre ellas. – 5gon12eder

+3

Otra opción es usar 'space: = $ (subst ,,)'. –

Cuestiones relacionadas