J'ai un projet avec plusieurs sous-répertoires, le principal Makefile doit être capable de construire/nettoyer certains sous-répertoires - les noms exacts des sous-répertoires sont passés dans une variable (DIRS dans l'exemple):GNU Make ne parvient pas à entrer des sous-répertoires à partir d'une boucle
DIRS = dir1 dir2 # Usually passed from the command line
.PHONY: all clean $(DIRS)
all: $(DIRS)
# ... do stuff in this direcotry ...
$(DIRS):
$(MAKE) -C $(@)
clean:
# ... Clean this directory ...
$(foreach d,$(DIRS),cd $(d) && $(MAKE) clean;)
Depuis que je suis déjà en utilisant les noms des répertoires comme une cible de construction, je veux utiliser une boucle pour le nettoyage de chaque sous-répertoire. Mais je reçois l'erreur suivante:
$ make clean
# ... Clean this directory ...
cd dir1 && make clean; cd dir2 && make clean;
make[1]: Entering directory `/home/ex/clean_try/dir1'
rm -fr *.o
make[1]: Leaving directory `/home/ex/clean_try/dir1'
/bin/sh: 1: cd: can't cd to dir2
make: *** [clean] Error 2
Il semble que c'est déjà laissant dir1, comment se fait-il ne peut pas entrer dir2 dans le répertoire principal?
OK, qui a fait l'affaire. Mais ... comment se fait-il qu'il dit: 'Quitter le répertoire '/ home/ex/clean_try/dir1'' avant l'erreur? C'est pour le moins déroutant ... – TKKS
C'est normal de faire un make-in-make. Suppressable avec '--no-print-directory' – Mischa