ฉันได้รับผลลัพธ์ที่ไม่คาดคิดโดยเรียกใช้ makefile จากอีก ฉันมีสอง makefiles หนึ่งเรียกว่าและเป็นหนึ่งเรียกว่า/path/to/project/makefile
/path/to/project/gtest-1.4.0/make/Makefile
ฉันพยายามที่จะเรียกอดีตคนหลัง ใน / path / to / project / 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
และในตัว/path/to/project/gtest-1.4.0/make/Makefile
ฉันมี
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
ออกรายการต่อไปนี้:
cd /path/to/project
make
ขาออก:
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'
อย่างไรก็ตามเมื่อฉันออกคำสั่งเหล่านี้:
cd /path/to/project
make clean
ฉันเห็น:
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'
ฉันไม่เข้าใจ: ในทั้งสองกรณี/path/to/project/makefile
กำลังบอกฉันว่ากำลังเข้าสู่ไดเร็กทอรีการทำงานปัจจุบัน ในกรณีแรกไม่คิดว่าจะมีงานทำ (เมื่อมี) และในกรณีที่สองสามารถค้นหาคำสั่งที่เหมาะสมได้ (เมื่อผลลัพธ์บอกฉันว่ามันกำลังมองหาในไดเรกทอรีที่ไม่ถูกต้อง) แต่มันก็พยายาม เพื่อเรียกใช้rm
คำสั่ง/path/to/project
แทน/path/to/makefile/gtest-1.4.0/make/
.
ฉันขาดอะไรพื้นฐานในการโทรหา makefiles จากกันและกันหรือไม่? ฉันได้ทำผิดพลาดทางความคิดอย่างร้ายแรงหรือเกิดข้อผิดพลาดทั่วไปหรือไม่? ฉันจะเปลี่ยนไดเร็กทอรีอย่างมีประสิทธิภาพและเรียก makefile ที่สองจากภายในไดเร็กทอรีแรกได้อย่างไร ความเข้าใจของฉันคือแค่การโทรmake -f <name>
ก็เพียงพอแล้ว
นี่คือ make / gmake 3.81 ใน bash
make -f gtest-1.4.0/make/Makefile clean
$(MAKE) -C gtest-1.4.0/make clean
ทำไมคุณไม่ได้กำหนดเป้าหมายของปลอม?