web-dev-qa-db-fra.com

Caractère générique pour obtenir la liste de tous les répertoires

Dans mon Makefile, j'ai besoin d'obtenir une liste de tous les répertoires présents dans un autre répertoire.

Pour obtenir une liste de tous les répertoires du même dossier que mon Makefile j'utilise:

DIRECTORIES = $(wildcard */)

all:
    echo $(DIRECTORIES)

qui fonctionne bien et me donne la liste souhaitée. Cependant, si je veux avoir une liste de tous les répertoires dans un autre répertoire en utilisant

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

all:
    echo $(DIRECTORIES)

J'obtiens une liste de TOUS les fichiers (avec des chemins) dans ce répertoire, y compris .h et .cpp des dossiers.

Des suggestions pourquoi cela se produit et comment y remédier? D'autres solutions pour obtenir la liste sont également les bienvenues.

30
Haatschii

Utilisez les fonctions sort et dir avec wildcard:

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

De GNU faire manuel:

$ (dir names ...) Extrait la partie répertoire de chaque nom de fichier en noms. La partie répertoire du nom de fichier est tout ce qui se passe jusqu'à (et y compris) la dernière barre oblique. Si le nom de fichier ne contient pas de barre oblique, la partie répertoire est la chaîne ‘./’.

$ (liste de tri) Trie les mots de la liste dans l'ordre lexical, en supprimant les mots en double. Le résultat est une liste de mots séparés par des espaces simples.

Regardez également la deuxième et la troisième méthode dans cet article: Création automatique d'une liste de répertoires

39
Lei Mou

Essayer:

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

qui vous donnera la liste des répertoires à l'intérieur d'un répertoire donné sans entrer dans les sous-répertoires. Vous devrez peut-être nettoyer cette liste car elle comprendra . et ./ avant chaque répertoire répertorié.

15
regulatethis

Utilisation:

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

Cela fonctionne bien.

2
yuanjianpeng