在我的Makefile中,我需要获取其他目录中存在的所有目录的列表。
要获取与我使用的Makefile
相同的文件夹中的所有目录的列表:
DIRECTORIES = $(wildcard */)
all:
echo $(DIRECTORIES)
工作正常,并给我所需的列表。但是,如果我想使用
获得另一个目录中的所有目录的列表DIRECTORIES = $(wildcard ../Test/*/)
all:
echo $(DIRECTORIES)
我在该目录中获得所有文件(包含路径)的列表,包括.h
和.cpp
个文件。
为什么会发生这种情况以及如何解决问题?其他获得该名单的解决方案也是受欢迎的。
答案 0 :(得分:37)
将sort
和dir
功能与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/*/.)
这很好。