Je reçois des résultats inattendus appelant un makefile d'un autre. J'ai deux makefiles, un appelé /path/to/project/makefile
et un appelé /path/to/project/gtest-1.4.0/make/Makefile
. Je tente d'avoir le premier appel le dernier. Dans/path/to/projet/makefile, jeComment appeler Makefile à partir d'un autre Makefile?
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 /path/to/project/gtest-1.4.0/make/Makefile
je
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
émission les éléments suivants:
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, quand je publie 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 est entrer dans le répertoire de travail courant. Dans le premier cas, il ne pense pas qu'il a du travail à faire (quand c'est le cas) et dans le second cas, il est capable de trouver la directive appropriée (quand la sortie me dit qu'il regarde dans le mauvais répertoire) pour exécuter la commande rm
dans /path/to/project
, au lieu de /path/to/makefile/gtest-1.4.0/make/
. Est-ce que je manque quelque chose de fondamental à l'appel de makefiles les uns des autres?
Ai-je commis une erreur conceptuelle flagrante ou atteint un piège commun? Comment puis-je changer efficacement de répertoire et appeler un second makefile depuis le premier? Ma compréhension était que simplement appeler make -f <name>
serait suffisant.
C'est make/gmake 3.81 dans bash.
Je pense que, au lieu de 'make -f gtest-1.4.0/faire/Makefile clean' tu ferais mieux de dire '$ (MAKE) -C gtest-1.4.0/make clean'. Pourquoi n'avez-vous pas défini de cibles bidons? –
http://stackoverflow.com/questions/3494999/subdirectories-and-makefiles –