Tôi nhận được một số kết quả không mong đợi khi gọi một makefile từ một makefile khác. Tôi có hai trang điểm, một được gọi /path/to/project/makefile
và một được gọi /path/to/project/gtest-1.4.0/make/Makefile
. Tôi đang cố gọi trước là sau. Trong / path / to / project / makefile, tôi có
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
Và trong /path/to/project/gtest-1.4.0/make/Makefile
tôi có
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
Phát hành như sau:
cd /path/to/project
make
Kết quả đầu ra:
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'
Tuy nhiên, khi tôi phát hành các lệnh này:
cd /path/to/project
make clean
Tôi hiểu rồi:
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'
Tôi không hiểu: Trong cả hai trường hợp, /path/to/project/makefile
cho tôi biết rằng nó đang vào thư mục làm việc hiện tại. Trong trường hợp đầu tiên, nó không nghĩ rằng nó có việc phải làm (khi nó làm) và trong trường hợp thứ hai, nó có thể tìm thấy chỉ thị thích hợp (khi đầu ra cho tôi biết nó đang tìm kiếm trong thư mục sai) nhưng nó cố gắng để chạy rm
lệnh trong /path/to/project
, thay vì /path/to/makefile/gtest-1.4.0/make/
.
Tôi có thiếu một cái gì đó cơ bản để gọi các tệp trang điểm từ nhau không? Tôi đã mắc phải một sai lầm nghiêm trọng về khái niệm hay mắc phải một lỗi chung? Làm cách nào để thay đổi hiệu quả các thư mục và gọi một makefile thứ hai từ bên trong tệp đầu tiên? Tôi hiểu rằng chỉ cần gọi điện make -f <name>
là đủ.
Đây là make / gmake 3,81 trong bash.
make -f gtest-1.4.0/make/Makefile clean
bạn nói tốt hơn$(MAKE) -C gtest-1.4.0/make clean
. Tại sao bạn chưa xác định mục tiêu giả?