从 makefile 变量获取顶级目录

从 makefile 变量获取顶级目录

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

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

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

答案1

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

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

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

答案2

如果您确定 BUILD_DIR 永远不会以“/”开头:

rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )

否则,您可能需要考虑以“/”开头的路径:

if [[ $BUILD_DIR =~ "^/" ]]; then
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1,2 )
else
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )
fi

echo $rootdir

或者也许最好忽略任何以“/”开头的路径。

相关内容