Estou obtendo resultados inesperados chamando um makefile de outro. Eu tenho dois makefiles, um chamado /path/to/project/makefile
e outro chamado /path/to/project/gtest-1.4.0/make/Makefile
. Estou tentando fazer com que o primeiro ligue para o último. Em / path / to / project / makefile, tenho
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
E /path/to/project/gtest-1.4.0/make/Makefile
eu tenho
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
Emitindo o seguinte:
cd /path/to/project
make
Saídas:
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'
No entanto, quando eu emito estes comandos:
cd /path/to/project
make clean
Entendo:
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'
Não entendo: nos dois casos, /path/to/project/makefile
está me dizendo que está entrando no diretório de trabalho atual. No primeiro caso, ele não acha que tem trabalho a fazer (quando existe) e no segundo caso, é capaz de encontrar a diretiva apropriada (quando a saída está me dizendo que está procurando no diretório errado), mas tenta para executar o rm
comando /path/to/project
, em vez de /path/to/makefile/gtest-1.4.0/make/
.
Estou perdendo algo fundamental para chamar makefiles um do outro? Cometi um erro conceitual flagrante ou atingi uma armadilha comum? Como altero efetivamente os diretórios e chamo um segundo makefile de dentro do primeiro? Meu entendimento era que simplesmente chamar make -f <name>
seria suficiente.
Isso é make / gmake 3.81 no bash.
make -f gtest-1.4.0/make/Makefile clean
você dizer melhor$(MAKE) -C gtest-1.4.0/make clean
. Por que você não definiu alvos falsos?