从GNU Makefile中的目录列表中删除子目录
我有一个Makefile变量(在任何配方之前声明),它包含一个目录列表:从GNU Makefile中的目录列表中删除子目录,makefile,gnu-make,Makefile,Gnu Make,我有一个Makefile变量(在任何配方之前声明),它包含一个目录列表: DIRS = foo bar bar/baz ../qux/quux ../qux foo bar ../qux 现在我想删除其他目录已经包含的子目录: DIRS = foo bar bar/baz ../qux/quux ../qux foo bar ../qux 我不在乎保持路径的顺序或相对性。这可以使用GNU Make(可用于任何任意字符串)和。概念很简单: 构建一个模式列表,这些模式是原始目录列表加上超出所
DIRS = foo bar bar/baz ../qux/quux ../qux
foo bar ../qux
现在我想删除其他目录已经包含的子目录:
DIRS = foo bar bar/baz ../qux/quux ../qux
foo bar ../qux
我不在乎保持路径的顺序或相对性。这可以使用GNU Make(可用于任何任意字符串)和。概念很简单:
%
将是这里的通配符,因此我们将使用$(addsuffix,)
将/%
附加到列表中的每个单词$(过滤掉,)
所做的DIRS = foo bar bar/baz ../qux/quux ../qux
PARENTS = $(filter-out $(addsuffix /%,$(DIRS)),$(DIRS))
default:
@echo $(PARENTS)
运行该Makefile应输出:
foo bar ../qux
这很聪明,谢谢!它不处理大小写
foo-bar..
(获取foo-bar..
而不是。
),但使用realpath
命令实现了这一点。