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

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

最佳答案

因为方式$(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/

相关文章:

windows - gmake 使用 sh.exe 会导致构建错误

makefile - 获取 "make: Nothing to be done for ' 目标的错误'"

makefile - 一次为多个目标执行配方

c++ - 我从哪里获得 qm 可执行文件?

makefile - 避免重新生成不会更改的文件

makefile - 如何配置我的 makefile 以进行调试和发布版本?

linux - 在 Linux 中注册 header 搜索位置的常用机制是什么?

c++ - 如何编写 makefile 来处理头文件中的更改

c++ - msvc + GNU 制作

c - 完全相同的命令行在 Make 中产生错误,但如果从 shell 运行则成功