获取 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
或者也许最好忽略任何以“/”开头的路径。