Makefile 如何在make中将相对路径上移一级?

Makefile 如何在make中将相对路径上移一级?,makefile,Makefile,抱歉,这有点深奥,但在我的makefile中有一个变量$(BASE),它是一个相对路径。我需要把这条路往上一层。 所以如果我有“../../../src”,我想要“../../src”。 有没有办法在Make中轻松执行此操作?如果要执行此操作的BASE的所有值都以开头。可以尝试 $(patsubst ../%,%,$(BASE)) 如果您只想删除任意路径的第一个组件(即a/b/c->b/c),则需要做更多的工作: space := $(empty) $(empty) shift-list =

抱歉,这有点深奥,但在我的makefile中有一个变量$(BASE),它是一个相对路径。我需要把这条路往上一层。 所以如果我有“../../../src”,我想要“../../src”。
有没有办法在Make中轻松执行此操作?

如果要执行此操作的
BASE
的所有值都以
开头。
可以尝试

$(patsubst ../%,%,$(BASE))
如果您只想删除任意路径的第一个组件(即a/b/c->b/c),则需要做更多的工作:

space := $(empty) $(empty)
shift-list = $(wordlist 2,$(words $1),$1)
shift-path = $(subst $(space),/,$(call shift-list,$(subst /, ,$1)))

并将其用作
$(调用移位路径,$(基))
。如果你的路径有空格,这会中断,但无论如何,在
make
中处理这些空格是一场噩梦,因为还有很多其他原因。

我对简单的一个很有希望,因为我所有的路径都是从../开始的,但它删除了所有../,这并不是我想要的。第二个,更复杂的一个成功了!这很奇怪,
patsubst
应该可以正常工作。这对我来说确实有效。你能显示你使用的代码和你在上面使用的值吗?