在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及更高版本中使用它。
答案 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)))