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.
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
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é.
Utilisation:
$(wildcard ../Test/*/.)
Cela fonctionne bien.