从 makefile 变量获取顶级目录

l0b*_*0b0 9 make

获取 makefile 变量的顶级目录部分的最简单代码是什么?例子:

BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>
Run Code Online (Sandbox Code Playgroud)

PS:我的意思不是$(dir $(dir $(BUILD_DIR))),而是获取任何变量值的第一个目录部分的东西。

Gil*_*il' 6

你的意思是目录的第一个组件?如果是这样,将路径转换为组件列表,然后提取第一个组件。我假设您正在使用 GNU make,并且您没有做一些疯狂的事情,例如期望带有空格的文件名毫发无损。不要尝试使用绝对路径。

override BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf $(firstword $(subst /, ,$(BUILD_DIR)))
Run Code Online (Sandbox Code Playgroud)

BUILD_DIR覆盖了用户可能在命令行上传递的任何内容,以避免有人不小心传递它并意外删除了某些内容。