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

时间:2013-07-23 10:18:24

标签: gnu-make

在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 个答案:

答案 0 :(得分:4)

由于$(dir ...)函数在GNU make中的工作方式,它并不像它可能的那样好,但它比上面的(IMO)更好:

V4 = $(notdir $(patsubst %/,%,$(dir $(CURDIR))))

留下尾随斜杠的想法是允许连接(使操作可逆),但根据我的经验,这最终在实践中不是非常有用,并且必须剥离尾部斜线是PITA。然而,事实就是这样,现在改变它的历史太多了。

ETA:

如果你愿意,你可以创建一个更像shell dirname的函数并使用call:

dirname = $(patsubst %/,%,$(dir $1))

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