Makefile make/gmake:给定一个以多个../开头的变量,创建一个少一个..的变量/
给定一个变量,如何创建另一个前面重复Makefile make/gmake:给定一个以多个../开头的变量,创建一个少一个..的变量/,makefile,gnu-make,Makefile,Gnu Make,给定一个变量,如何创建另一个前面重复。/的变量,第一个变量以该变量开头,尽管重复次数少了一次 例如,给定。/../../foo/bar,如何以。/../../code>结束 我尝试了一个perl regexp,比如perl-e'$a=“../../../../foo/bar”$a=~/^\.\.\.\/((\.\.\./)+)/;打印“$1\n”,但无法理解在$(shell)中运行它所需的引号、反斜杠、美元符号等魔法咒语 此外,我怀疑还有一种更简单的方法。这将删除前面的一个。/:$(patsub
。/
的变量,第一个变量以该变量开头,尽管重复次数少了一次
例如,给定。/../../foo/bar
,如何以。/../../code>结束
我尝试了一个perl regexp,比如perl-e'$a=“../../../../foo/bar”$a=~/^\.\.\.\/((\.\.\./)+)/;打印“$1\n”
,但无法理解在$(shell)
中运行它所需的引号、反斜杠、美元符号等魔法咒语
此外,我怀疑还有一种更简单的方法。这将删除前面的一个。/
:$(patsubst../%,%,$(原始路径))
要分离出。/
的第一条条纹,可以按以下步骤进行:
space := $(strip) $(strip)#
FIRST_STREAK := $(firstword $(subst $(space)../,../,$(subst ../,../$(space),$(ORIGINAL_PATH))))
让我们把它写成一个函数:
space := $(strip) $(strip)#
UP_PATH = $(patsubst ../%,%,$(firstword $(subst $(space)../,../,$(subst ../,../$(space),$1))))
测试它:
ORIGINAL_PATH := ../../../foo/bar/../baz
$(info $(call UP_PATH,$(ORIGINAL_PATH)))
输出:
../../
你说的“变量”是什么意思?make
变量所需的长度缩短为一个。/
可以通过以下方式构造:$(patsubst../%,%,$(原始路径))
。很好,现在如何将foo/bar部分从末端取下?说清楚,从../../../foo/bar开始,我需要以../../foo/bar结束,你能接受吗?还是你失败了?@Vroomfondel-thx。当我完成复杂的make系统设计时,我最终不需要这个功能,所以我没有测试您的响应,但它看起来很棒,谢谢!