Saya mendapatkan hasil yang tidak terduga dengan memanggil satu makefile dari yang lain. Saya punya dua makefile, satu dipanggil /path/to/project/makefile
dan satu lagi dipanggil /path/to/project/gtest-1.4.0/make/Makefile
. Saya mencoba agar yang pertama menelepon yang terakhir. Di / path / to / project / makefile, saya punya
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
Dan /path/to/project/gtest-1.4.0/make/Makefile
saya punya
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
Menerbitkan hal berikut:
cd /path/to/project
make
Keluaran:
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'
Namun, ketika saya mengeluarkan perintah ini:
cd /path/to/project
make clean
Saya melihat:
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'
Saya tidak mengerti: Dalam kedua kasus, /path/to/project/makefile
memberi tahu saya bahwa itu memasuki direktori kerja saat ini. Dalam kasus pertama, ia tidak berpikir itu harus dilakukan (ketika itu terjadi) dan dalam kasus kedua, ia dapat menemukan direktif yang sesuai (ketika keluaran memberi tahu saya bahwa ia mencari di direktori yang salah) namun ia mencoba untuk menjalankan rm
perintah /path/to/project
, alih-alih /path/to/makefile/gtest-1.4.0/make/
.
Apakah saya kehilangan sesuatu yang mendasar untuk memanggil makefiles dari satu sama lain? Apakah saya telah membuat kesalahan konseptual yang parah, atau mengalami kesulitan yang umum? Bagaimana cara mengubah direktori secara efektif dan memanggil makefile kedua dari dalam yang pertama? Pemahaman saya adalah bahwa menelepon make -f <name>
saja sudah cukup.
Ini adalah make / gmake 3.81 di bash.
make -f gtest-1.4.0/make/Makefile clean
Anda lebih baik katakan$(MAKE) -C gtest-1.4.0/make clean
. Mengapa Anda belum menetapkan target palsu?