Joker 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 dans le même dossier que mon Makefile
j'utilise:
DIRECTORIES = $(wildcard */)
all:
echo $(DIRECTORIES)
qui fonctionne très bien, et me donne la liste de votre choix. Cependant, si je veux avoir une liste de tous les répertoires dans un autre répertoire à l'aide de
DIRECTORIES = $(wildcard ../Test/*/)
all:
echo $(DIRECTORIES)
- Je obtenir une liste de TOUS les fichiers (avec des chemins) dans ce répertoire, y compris .h
et .cpp
fichiers.
Des suggestions pourquoi cela arrive et comment le résoudre? D'autres solutions pour obtenir la liste sont également les bienvenus.
- Êtes-vous sûr wildcarding est une bonne idée?
- Je ne veux pas ajouter chaque répertoire manuellement, parce que c'est un projet de plus grande envergure. Si vous avez une idée de comment éviter wildcarding néanmoins, dis-le moi.
- La raison pour laquelle vous êtes en voyant ce comportement est dû à un bogue dans votre version de GLIBC: sourceware.org/bugzilla/show_bug.cgi?id=10278
Vous devez vous connecter pour publier un commentaire.
Utilisation
sort
etdir
fonctions en collaboration avecwildcard
:De GNU make manuel:
Aussi regarder la deuxième et la troisième méthode dans cet article: Création automatique d'une Liste de Répertoires
sort
par exemple. Vous pouvez utiliser:$(dir $(wildcard ../Test/*/.))
(note de l'ajout de la la.
à la fin pour s'assurer que le dernier caractère n'est pas un slash) et il fonctionnera partout.sort
assure que les répertoires sont parcourus dans l'ordre alphabétique. Ceci est utile si vous voulez être en mesure de dire à un coup d'œil dans quelle mesure la construction a commencé, par exemple. Quand j'ai omis, j'ai constaté que sur Windows, les répertoires sont parcourus dans l'ordre alphabétique, mais sur Linux, ils ne l'étaient pas.Essayer:
qui vous donnera la liste des répertoires dans un répertoire donné, sans entrer dans les sous-répertoires. Vous devrez peut-être nettoyer cette liste car il contient des
.
et./
avant chaque répertoire indiqué.<directory>
vous pouvez utiliser-mindepth 1 -maxdepth 1
..
et./
?Utilisation:
Cela fonctionne bien.