38

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

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

DIRECTORIES = $(wildcard */)

all:
    echo $(DIRECTORIES)

效果很好,并给了我想要的列表。但是,如果我想使用另一个目录中的所有目录列表

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

all:
    echo $(DIRECTORIES)

我得到了该目录中所有文件(带路径)的列表,包括.h文件.cpp

任何建议为什么会发生这种情况以及如何解决它?也欢迎其他获取列表的解决方案。

4

3 回答 3

46

与一起使用sort和功能:dirwildcard

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

来自 GNU make 手册:

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

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

另请看本文中的第二种和第三种方法:自动创建目录列表

于 2012-12-16T03:19:21.710 回答
18

尝试:

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

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

于 2012-12-16T02:53:31.720 回答
6

采用:

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

这工作正常。

于 2018-11-10T15:31:57.267 回答