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/

相关文章:

c - GNU 制造商 : detect Xcode

performance - 如何加快启用 CMake 的 C++ 项目的编译时间?

opencv - cmake 无法找到与 Unix Makefiles 对应的构建程序

debugging - 了解 GNU make 重制特定文件的原因

linux - 在 makefile 中指定文件名

makefile - 你能优先考虑 makefile 目标吗?

makefile - gnu make、microsoft nmake 和 posix standard make 有何相似/不同?

makefile - Makefile 中的双冒号规则是什么?

c - 制作 Target 依赖源列表

gcc - 如何将参数传递给 makefile 配方,或在解析时解析变量