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 及更高版本中工作。

4

1 回答 1

4

由于该$(dir ...)函数在 GNU make 中的工作方式,它并没有想象中的那么好,但它比上面的(IMO)要好:

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

留下斜杠背后的想法是允许连接(使操作可逆),但根据我的经验,这在实践中最终不是很有用,并且必须去除斜杠是 PITA。然而,它就是这样,现在有太多的历史来改变它。

预计到达时间:

如果你愿意,你可以制作一个更像 shell 的函数dirname并使用调用:

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

V4 = $(notdir $(call dirname,$(CURDIR)))
于 2013-07-23T10:24:26.743 回答