在 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 及更高版本中工作。
最佳答案
因为方式$(dir ...)
函数在 GNU make 中工作,它没有想象的那么好,但它比上面的(IMO)更好:
V4 = $(notdir $(patsubst %/,%,$(dir $(CURDIR))))
留下尾随斜线背后的想法是允许连接(使操作可逆),但根据我的经验,这在实践中最终不是很有用,并且不得不去除尾随斜线是一个 PITA。然而,事实就是如此,现在已经有太多的历史无法改变它了。
预计到达时间:
如果你愿意,你可以制作一个更像 shell 的
dirname
的函数。并使用电话:dirname = $(patsubst %/,%,$(dir $1))
V4 = $(notdir $(call dirname,$(CURDIR)))
关于gnu-make - 如何在gnu make中拆分路径名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807377/