从GNU Makefile中的目录列表中删除子目录

时间:2016-12-30 00:54:46

标签: makefile gnu-make

我有一个Makefile变量(在任何配方之前声明),其中包含目录列表:

DIRS = foo bar bar/baz ../qux/quux ../qux

现在我想删除其他目录已包含的子目录:

foo bar ../qux

我不关心保持路径的顺序或相对性。

1 个答案:

答案 0 :(得分:0)

这可以使用GNU-Make file name functions(可用于任意字符串)和text functions的组合来完成。这个概念很简单:

  1. 构建原始目录列表中的模式列表以及超出所包含的路径数量。这里的%将成为外卡,因此我们会使用/%$(addsuffix <suffix>,<word list>)附加到列表中的每个字词上。

  2. 从原始单词列表中删除与该图案列表匹配的任何内容。这是$(filter-out <pattern>,<word list>)的作用。

  3. 把它们放在一起,看起来像这样:

    DIRS = foo bar bar/baz ../qux/quux ../qux
    PARENTS = $(filter-out $(addsuffix /%,$(DIRS)),$(DIRS))
    
    default:
        @echo $(PARENTS)
    

    运行Makefile应输出:

    foo bar ../qux