J'obtiens des résultats inattendus en appelant un makefile à partir d'un autre. J'ai deux makefiles, l'un appelé /path/to/project/makefile
et l'un d'entre eux a appelé /path/to/project/gtest-1.4.0/make/Makefile
. J'essaie de faire en sorte que le premier appelle le second. Dans /path/to/project/makefile, j'ai
dev: $(OBJ_FILES)
$(CPPC) $(LIBS) $(FLAGS_DEV) $(OBJ_FILES) -o $(BIN_DIR)/$(PROJECT)
$(MAKE) -f ./gtest-1.4.0/make/Makefile
clean:
rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
rm -f ../svn-commit.tmp~
rm -f $(BIN_DIR)/$(PROJECT)
make -f gtest-1.4.0/make/Makefile clean
Et en /path/to/project/gtest-1.4.0/make/Makefile
J'ai
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
Délivrant ce qui suit :
cd /path/to/project
make
Sorties :
make -f ./gtest-1.4.0/make/Makefile
make[1]: Entering directory `/path/to/project'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/path/to/project'
Cependant, lorsque je lance ces commandes :
cd /path/to/project
make clean
Je vois :
make -f gtest-1.4.0/make/Makefile clean
make[1]: Entering directory `/path/to/project'
rm -f gtest.a gtest_main.a *.o
make[1]: Leaving directory `/path/to/project'
Je ne comprends pas : Dans les deux cas, /path/to/project/makefile
me dit qu'il entre dans le répertoire de travail actuel. Dans le premier cas, il pense qu'il n'a pas de travail à faire (alors qu'il en a) et dans le second cas, il est capable de trouver la directive appropriée (alors que la sortie me dit qu'il cherche dans le mauvais répertoire) et pourtant il essaie d'exécuter la commande rm
dans la commande /path/to/project
au lieu de /path/to/makefile/gtest-1.4.0/make/
.
Ai-je raté quelque chose de fondamental dans le fait d'appeler les makefiles les uns des autres ? Ai-je commis une erreur conceptuelle flagrante ou suis-je tombé sur un écueil courant ? Comment changer efficacement de répertoire et appeler un second makefile à partir du premier ? J'ai cru comprendre que le simple fait d'appeler make -f <name>
suffirait.
Il s'agit de make/gmake 3.81 en bash.