使subst不能按我的意愿工作

时间:2013-12-03 15:39:05

标签: makefile gnu-make

我正在尝试使用makefile“subst”函数来分割文本。这是我的代码。

$(subst :,\nvalue:,peter:value:2)

我想要做的是从第一次出现':'开始拆分。但它也会在第二次出现时分裂。有人可以帮我解决这个问题。结果她类似于下面。

peter\nvalue:value:2

2 个答案:

答案 0 :(得分:1)

正如文档所述,subst函数用新文本替换原始文本的每个出现。

如果你只想要第一个你必须得到更多的幻想,如果你想在make中完全做到这一点,你对第一个冒号之前或之后的文本一无所知。这样的事情应该有效:

VAL := peter:value:2
NEW := $(patsubst $(firstword $(subst :, ,$(VAL)))%,$(firstword $(subst :, ,$(VAL)))\nvalue%,$(VAL))

可能有一种更简单的方法可以做到;我不得不考虑一下。

答案 1 :(得分:0)

如果您不介意调用shell来执行此操作,则可以执行以下操作:

VAL := peter:value:2
NEW := $(shell echo "$(VAL)" | sed -e 's/:/\\nvalue:/')

我不确定您的\n是否为文字“\ n”或换行符。我假设前者。这意味着\n表达式中的sed需要转义为\\n


在make中完全执行它的另一种方法(没有任何shell调用):

empty:=
space:= $(empty) $(empty)

VAL := peter:value:2
VL := $(subst :, ,$(VAL))
NEW := $(firstword $(VL))\nvalue:$(subst $(space),:,$(wordlist 2,$(words $(VL)),$(VL)))

警告:如果原始值包含空格,此方法将给出不正确的结果。