2010-07-24 47 views
10

Tôi không chắc đó là gmake hay gcc mà tôi không hiểu ở đây.xóa các tệp phụ thuộc

Tôi đang sử dụng tùy chọn -MM và -MD để tạo quy tắc phụ thuộc cho khung Kiểm tra đơn vị tôi đang sử dụng. Cụ thể là:

$(TEST_OBJ_DIR)/%.d: $(TEST_SRC_DIR)/%.cpp 
    @$(CPPC) -MM -MD $< -o [email protected] 
    @sed -i -e 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(TEST_OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1.o:|' [email protected] 

-include $(TEST_DEP_FILES) 

Khi tôi chạy make, sau khi tất cả mã nhị phân được liên kết (đúng), tôi thấy thêm (không rõ nguyên nhân) dòng sau đây trước khi làm thoát

rm test/obj/dice.d test/obj/regex.o test/obj/inventoryContainer.d test/obj/color-string.d test/obj/dice.o test/obj/inventoryContainer.o test/obj/color-string.o test/obj/regex.d 

Từ đâu là rm lệnh sắp tới? Các chỉ diễn ra - bất cứ nơi nào - mà tôi có một lệnh rm trong makefile của tôi là trong chỉ thị sạch

test-clean: 
    rm -f $(TEST_BIN_FILES) 
    rm -f $(TEST_OBJ_DIR)/*.{a,d,o} 

Bất kỳ ý tưởng?

Trả lời

10

thực hiện sẽ tự động tạo intermediate files nếu cần thiết để kết nối hai quy tắc với nhau, nhưng nó sẽ xóa chúng ở cuối bản dựng. Bạn có thể sử dụng các mục tiêu đặc biệt .PRECIOUS để ngăn chặn nó từ tháo gỡ chúng chỉ

+1

Hoặc .SECONDARY ... – reinierpost

+0

@rei Ah, vâng. Tôi biết '.SECONDARY' buộc phải xử lý các tập tin như những người trung gian, nhưng tôi đã không nhận ra nó cũng ngừng làm cho việc xóa chúng –

0

Một lựa chọn hữu ích để gỡ lỗi các loại vấn đề là việc chuyển đổi -n:

make -n {TARGET} 

Nó sẽ cho bạn thấy các lệnh nó sẽ chạy nhưng won 't thực sự chạy chúng. Điều này cho phép bạn xem quy tắc nào đang kích hoạt nhưng không cung cấp cho bạn tất cả các đầu ra bổ sung khiến việc chẩn đoán vấn đề trở nên khó khăn.

Cờ gỡ lỗi -d cũng có thể hữu ích nhưng hãy chắc chắn chạy nó trong ngữ cảnh nơi bạn có thể cuộn xung quanh dễ dàng, bạn sẽ nhận được nhiều đầu ra. Tôi thường sử dụng chế độ vỏ emacs vì nó có chức năng tìm kiếm tốt và lưu bộ đệm.

Các vấn đề liên quan