在GNU Make中,我需要获取运行makefile的目录的父目录的名称.
例如,如果makefile是/ home/fnord/foo/bar/Makefile,我想将变量设置为字符串"foo".
我可以使用一些GNU Make内置函数来实现这一点,为了清楚起见,这里显示了所有这些功能.
V1=$(CURDIR)
V2=$(dir $(V1))
V3=$(subst /, ,$(V2))
V4=$(lastword $(V3))
Run Code Online (Sandbox Code Playgroud)
对于这样一个简单的要求,这似乎很复杂,但我找不到更好的方法.有没有更好的技术来分割GNU Make中的路径名?
我需要这个在GNU Make 3.81及更高版本中工作.
由于该$(dir ...)函数在 GNU make 中的工作方式,它并没有想象的那么好,但它比上面的更好(IMO):
V4 = $(notdir $(patsubst %/,%,$(dir $(CURDIR))))
Run Code Online (Sandbox Code Playgroud)
保留尾部斜杠背后的想法是允许连接(使操作可逆),但根据我的经验,这在实践中并不是很有用,而且必须删除尾部斜杠是一个 PITA。然而,这就是事实,现在有太多的历史无法改变它。
预计到达时间:
如果您愿意,您可以创建一个更像 shell 的函数dirname并使用 call:
dirname = $(patsubst %/,%,$(dir $1))
V4 = $(notdir $(call dirname,$(CURDIR)))
Run Code Online (Sandbox Code Playgroud)