Подстановочный знак для получения списка всех каталогов
В моем Makefile мне нужно получить список всех каталогов, присутствующих в каком-либо другом каталоге.
Чтобы получить список всех каталогов в той же папке, что и мой Makefile
, я использую:
DIRECTORIES = $(wildcard */)
all:
echo $(DIRECTORIES)
который отлично работает и дает мне нужный список. Однако, если я хочу иметь список всех каталогов в другом каталоге, используя
DIRECTORIES = $(wildcard ../Test/*/)
all:
echo $(DIRECTORIES)
Я получаю список ВСЕХ файлов (с путями) в этом каталоге, включая файлы .h
и .cpp
.
Любые предложения, почему это происходит и как это исправить? Другие решения для получения списка также приветствуются.
Ответы
Ответ 1
Используйте функции sort
и dir
вместе с wildcard
:
DIRECTORY = $(sort $(dir $(wildcard ../Test/*/)))
Из руководства GNU:
$(имена dir...) Извлекает часть каталога каждого имени файла в именах. Каталоговая часть имени файла - это все, что происходит (и включает) последнюю косую черту. Если имя файла не содержит косой черты, частью каталога является строка './.
$(список сортировки) Сортирует слова списка в лексическом порядке, удаляя повторяющиеся слова. Вывод представляет собой список слов, разделенных пробелами.
Также рассмотрите второй и третий методы в этой статье: Автоматическое создание списка каталогов
Ответ 2
Try:
$(shell find <directory> -maxdepth 1 -type d)
который предоставит вам список каталогов внутри заданного каталога без перехода в подкаталоги. Возможно, вам придется очистить этот список, поскольку он будет включать .
и ./
перед каждым указанным каталогом.