Подтвердить что ты не робот

Подстановочный знак для получения списка всех каталогов

В моем Makefile мне нужно получить список всех каталогов, присутствующих в каком-либо другом каталоге.

Чтобы получить список всех каталогов в той же папке, что и мой Makefile, я использую:

DIRECTORIES = $(wildcard */)

all:
    echo $(DIRECTORIES)

который отлично работает и дает мне нужный список. Однако, если я хочу иметь список всех каталогов в другом каталоге, используя

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

all:
    echo $(DIRECTORIES)

Я получаю список ВСЕХ файлов (с путями) в этом каталоге, включая файлы .h и .cpp.

Любые предложения, почему это происходит и как это исправить? Другие решения для получения списка также приветствуются.

4b9b3361

Ответ 1

Используйте функции sort и dir вместе с wildcard:

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

Из руководства GNU:

$(имена dir...) Извлекает часть каталога каждого имени файла в именах. Каталоговая часть имени файла - это все, что происходит (и включает) последнюю косую черту. Если имя файла не содержит косой черты, частью каталога является строка './.

$(список сортировки) Сортирует слова списка в лексическом порядке, удаляя повторяющиеся слова. Вывод представляет собой список слов, разделенных пробелами.

Также рассмотрите второй и третий методы в этой статье: Автоматическое создание списка каталогов

Ответ 2

Try:

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

который предоставит вам список каталогов внутри заданного каталога без перехода в подкаталоги. Возможно, вам придется очистить этот список, поскольку он будет включать . и ./ перед каждым указанным каталогом.