我正在尝试使用makefile“subst”函数来分割文本。这是我的代码。
$(subst :,\nvalue:,peter:value:2)
我想要做的是从第一次出现':'开始拆分。但它也会在第二次出现时分裂。有人可以帮我解决这个问题。结果她类似于下面。
peter\nvalue:value: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)))
警告:如果原始值包含空格,此方法将给出不正确的结果。