在make文件中,我想从变量中给出的路径中删除一些子目录。我想我可以使用$(shell ...)
来做这件事,所以我认为sed
单行或类似行为就可以了。任何合适的make
技术都可以。
变量中包含的路径通常如下所示:
/repo/myrepo/products/foo/prod1/test/gtest/bin/XXX
或
/repo/myrepo/products/cool_products/bar/prod2/test/gtest/bin
我想在prod1
和prod2
之后删除所有内容,并给出结果:
/repo/myrepo/products/foo/prod1
/repo/myrepo/products/cool_products/bar/prod2
换句话说,剥离所有以test/gtest
开头的目录,我可以假设它在我将应用它的所有路径中。我无法弄清楚剥离不同数量的子目录的方法。
答案 0 :(得分:2)
sed 's#/test/gtest.*##g'
这将删除从/test/gtest
到结尾的所有内容。
<强>示例:强>
AMD$ echo "/repo/myrepo/products/foo/prod1/test/gtest/bin/XXX" | sed 's#/test/gtest.*##g'
/repo/myrepo/products/foo/prod1
答案 1 :(得分:1)
另一种可能性,如果你想用GNU make内部的函数来做,而不是通过$(shell ...)
调用一个单独的程序,那就像:
FULL_PATH = /repo/myrepo/products/foo/prod1/test/gtest/bin/XXX
STRIPPED_PATH := $(firstword $(subst /test/gtest, ,$(FULL_PATH)))
基本上这说“取$(FULL_PATH)
并首先用字符串中出现的空格字符替换字符串/test/gtest
,然后返回结果字符串的第一个单词”。