make/gmake:给定一个以多个../开头的变量,创建一个少一个../的变量

make/gmake: given a variable starting with multiple ../, create a variable with one less ../

给定一个变量,我如何创建另一个变量,其前导重复次数为第一个变量开头的 ../,尽管重复次数少了一次?

例如,给定 ../../../foo/bar,我如何以 ../../ 结束?

我试过像 perl -e '$a = "../../../foo/bar"; $a =~ /^\.\.\/((\.\.\/)+)/; print "\n"' 这样的 perl 正则表达式,但无法弄清楚引号、反斜杠、美元符号等需要在 [=15] 内 运行 =].

此外,我怀疑还有更简单的方法。

这将删除前面的一个 ../$(patsubst ../%,%,$(ORIGINAL_PATH))

要隔离 ../ 的第一连胜,可以按如下方式进行:

space := $(strip) $(strip)#
FIRST_STREAK := $(firstword $(subst $(space)../,../,$(subst ../,../$(space),$(ORIGINAL_PATH))))

让我们把它写成一个函数:

space := $(strip) $(strip)#
UP_PATH = $(patsubst ../%,%,$(firstword $(subst $(space)../,../,$(subst ../,../$(space),))))

测试一下:

ORIGINAL_PATH := ../../../foo/bar/../baz
$(info $(call UP_PATH,$(ORIGINAL_PATH)))

输出:

../../