如何在GNU make中拆分路径名?

5
在GNU Make中,我需要获取运行我的makefile所在目录的父目录名称。
例如,如果makefile位于/home/fnord/foo/bar/Makefile,则我想将变量设置为字符串“foo”。
我可以使用一些GNU Make内置函数来实现此目的,这里为了清晰起见将它们分开显示。
V1=$(CURDIR)
V2=$(dir $(V1))
V3=$(subst /, ,$(V2))
V4=$(lastword $(V3))

对于这么简单的需求,这似乎很复杂,但我找不到更好的方法。在GNU Make中,是否有更好的拆分路径名的技巧?

我需要在GNU Make版本3.81及更高版本中实现此功能。

1个回答

4
由于GNU make中$(dir ...)函数的工作方式,它并不像可能的那样完美,但比上面的方法要好(在我看来)。
V4 = $(notdir $(patsubst %/,%,$(dir $(CURDIR))))

留下尾部斜杠的想法是为了允许连接(使操作可逆),但根据我的经验,在实践中这对我们不是非常有用,并且去掉尾部斜杠很麻烦。然而,现在已经历史悠久,改变它几乎不可能。
预计完成时间:
如果你喜欢,可以编写一个更像shell的dirname函数并进行调用。
dirname = $(patsubst %/,%,$(dir $1))

V4 = $(notdir $(call dirname,$(CURDIR)))

有点遗憾,这使得它依赖于文件系统。 - Joe Atzberger
不确定您所说的“文件系统相关”。您是指Windows使用反斜杠而不是正斜杠吗? - MadScientist
例如,是的。 - Joe Atzberger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接