通配符获取所有目录的列表

时间:2012-12-16 01:59:36

标签: makefile wildcard gnu-make

在我的Makefile中,我需要获取其他目录中存在的所有目录的列表。

要获取与我使用的Makefile相同的文件夹中的所有目录的列表:

DIRECTORIES = $(wildcard */)

all:
    echo $(DIRECTORIES)

工作正常,并给我所需的列表。但是,如果我想使用

获得另一个目录中的所有目录的列表
DIRECTORIES = $(wildcard ../Test/*/)

all:
    echo $(DIRECTORIES)

我在该目录中获得所有文件(包含路径)的列表,包括.h.cpp个文件。

为什么会发生这种情况以及如何解决问题?其他获得该名单的解决方案也是受欢迎的。

3 个答案:

答案 0 :(得分:37)

sortdir功能与wildcard一起使用:

DIRECTORY = $(sort $(dir $(wildcard ../Test/*/)))

来自GNU make manual:

  

$(目录名......)   在名称中提取每个文件名的目录部分。文件名的目录部分是通过(并包括)其中最后一个斜杠的所有内容。如果文件名不包含斜杠,则目录部分为字符串'./'。

     

$(排序列表)   按词汇顺序对列表中的单词进行排序,删除重复单词。输出是由单个空格分隔的单词列表。

另请参阅本文中的第二种和第三种方法:Automatically Creating a List of Directories

答案 1 :(得分:15)

尝试:

$(shell find <directory> -maxdepth 1 -type d)

它将为您提供给定目录中的目录列表,而无需进入子目录。您可能需要清理该列表,因为它会在列出的每个目录之前包含../

答案 2 :(得分:2)

使用:

$(wildcard ../Test/*/.)

这很好。