我有一个Makefile变量(在任何配方之前声明),其中包含目录列表:
DIRS = foo bar bar/baz ../qux/quux ../qux
现在我想删除其他目录已包含的子目录:
foo bar ../qux
我不关心保持路径的顺序或相对性。
答案 0 :(得分:0)
这可以使用GNU-Make file name functions(可用于任意字符串)和text functions的组合来完成。这个概念很简单:
构建原始目录列表中的模式列表以及超出所包含的路径数量。这里的%
将成为外卡,因此我们会使用/%
将$(addsuffix <suffix>,<word list>)
附加到列表中的每个字词上。
从原始单词列表中删除与该图案列表匹配的任何内容。这是$(filter-out <pattern>,<word list>)
的作用。
把它们放在一起,看起来像这样:
DIRS = foo bar bar/baz ../qux/quux ../qux
PARENTS = $(filter-out $(addsuffix /%,$(DIRS)),$(DIRS))
default:
@echo $(PARENTS)
运行Makefile应输出:
foo bar ../qux