Exécuter la commande make dans chaque sous-répertoire
J'ai un répertoire (root_dir
), qui contient un certain nombre de sous-répertoires (subdir1, subdir2, ...
).
Je veux lancer le make
dans chaque répertoire dans root_dir
, à l'aide d'un Makefile placés en elle.
(Évidemment supposé que chaque de subdir...
a l'intérieur de son propre Makefile).
Donc, il y a essentiellement deux questions:
- Comment obtenir une liste de répertoires dans le Makefile (automatiquement)?
- Comment exécuter la commande make pour chacun des répertoires à l'intérieur d'un fichier?
Comme je l'ai knwow afin d'exécuter la commande make dans un répertoire spécifique, je garde de faire ce qui suit:
$(MAKE) -C subdir
Vous devez vous connecter pour publier un commentaire.
Il y a divers problèmes avec le fait de la sous-faire à l'intérieur d'une boucle for dans une même recette. La meilleure façon de le faire plusieurs sous-répertoires est comme ceci:
(Juste pour souligner c'est GNU make spécifique; il ne mentionne pas toutes les restrictions sur la version de make que vous utilisez).
ETA Voici une version qui prend en charge plusieurs haut-niveau des cibles.
.PHONY
est pour les cibles qui vous voulez être construit à chaque fois que le makefile fonctionne, peu importe qu'il existe ou pas ou s'il est hors de date.Essayez ceci :
Cela peut vous aider à lien
Edit : vous pouvez aussi le faire :
La façon la plus simple est de le faire:
L' .FAUX règle signifie que project_code n'est pas un fichier qui doit être
construit, et l'indicateur-C indique un changement dans l'annuaire (équivalent à
l'exécution de cd code avant de faire appel). Vous pouvez utiliser la même approche
pour appeler d'autres cibles dans le code Makefile.
Par exemple:
Source
Il y a une bibliothèque appelée prorab pour GNU make, qui soutient l'inclusion de autonome makefiles dans des sous-répertoires.
Quelques infos sur github: https://github.com/igagis/prorab/blob/master/wiki/HomePage.md
En fait, avec prorab invoquant tous les makefiles dans des sous-répertoires ressemble à ceci:
Puisque je n'étais pas au courant de la MAKECMDGOALS variable et négligé qu'MadScientist a sa propre mise en œuvre de plusieurs haut-niveau des objectifs, j'ai écrit une alternative de mise en œuvre. Peut-être que quelqu'un la trouver utile.