Wildcard to obtain list of all directories

gnu-make, makefile, wildcard

Solution

Use `sort` and `dir` functions together with `wildcard`:

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

From GNU make manual:

$(dir names...) Extracts the directory-part of each file name in names. The directory-part of the file name is everything up through (and including) the last slash in it. If the file name contains no slash, the directory part is the string ‘./’.

$(sort list) Sorts the words of list in lexical order, removing duplicate words. The output is a list of words separated by single spaces.

Also look at the second and the third method in this article: Automatically Creating a List of Directories

Problem

In my Makefile I need to get a list of all directories present in some other directory. To get a list of all directories in the same folder as my `Makefile` I use: ``` DIRECTORIES = $(wildcard */) all: echo $(DIRECTORIES) ``` which works fine, and gives me the desired list. However if I want to have a list of all directories in another directory using ``` DIRECTORIES = $(wildcard ../Test/*/) all: echo $(DIRECTORIES) ``` I get a list of ALL files (with paths) in that directory, including `.h` and `.cpp` files. Any suggestions why this happens and how to fix it? Other solutions to obtain the list are also welcome.

Original source