GNU将转换空间转换为冒号

时间:2012-05-13 12:19:21

标签: path makefile gnu-make space colon

给定以冒号分隔的路径列表,使用 GNU Make 获取以空格分隔的列表非常简单:

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

然而,我找不到朝着相反方向前进的好方法。以下hack确实有效(至少在安装了 sed 的情况下)但是我很确定只有使用 Make 的内部函数才能有更好的解决方法。

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

2 个答案:

答案 0 :(得分:19)

这里唯一棘手的部分是定义一个文字空间:

space :=
space +=

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

答案 1 :(得分:1)

获取文字空间的最短方法是通过$() $()。因此:

$(subst $() $(),:,$(CPATHS))

或者,为简便起见:

_=$() $()
$(subst $(_),:,$(CPATHS))