给定以冒号分隔的路径列表,使用 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)
答案 0 :(得分:19)
这里唯一棘手的部分是定义一个文字空间:
space :=
space +=
SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz
CPATHS := $(subst $(space),:,$(SPATHS))
答案 1 :(得分:1)
获取文字空间的最短方法是通过$() $()
。因此:
$(subst $() $(),:,$(CPATHS))
或者,为简便起见:
_=$() $()
$(subst $(_),:,$(CPATHS))