Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从GNU Makefile中的目录列表中删除子目录_Makefile_Gnu Make - Fatal编程技术网

从GNU 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(可用于任何任意字符串)和。概念很简单: 构建一个模式列表,这些模式是原始目录列表加上超出所

我有一个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(可用于任何任意字符串)和。概念很简单:

  • 构建一个模式列表,这些模式是原始目录列表加上超出所包含路径的数量。
    %
    将是这里的通配符,因此我们将使用
    $(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
    命令实现了这一点。