Chúng tôi đang thảo luận gần đây về cách chúng tôi xử lý các tệp .d cho các phụ thuộc trong quy trình tạo dựa trên thực hiện của chúng tôi. Vấn đề đã được nêu ra rằng đôi khi các tệp .d có thể bị hỏng khi các bản dựng bị gián đoạn.Bắt đầu xóa các tệp bổ sung do lỗi
Chúng tôi đang sử dụng mục tiêu .DELETE_ON_ERROR để đảm bảo rằng nếu một phiên bản bị gián đoạn hoặc không thành công, các tệp đối tượng mà nó đang trong quá trình tạo sẽ bị xóa. Tuy nhiên chúng tôi cũng đang sử dụng GCC để tạo ra các tập tin .d tại thời gian biên dịch mà sẽ cần phải được xóa là tốt. Có vẻ như không phải là một cách đơn giản để nói về điều này.
Vì vậy, câu hỏi là, có cách nào chúng ta có thể dỗ thực hiện để xóa cả đối tượng và tệp phụ thuộc của chúng tôi trong trường hợp có lỗi? Có cách nào chúng tôi có thể thiết lập các quy tắc để biết rằng cả tệp .d và .o được tạo cùng một lúc và cần xóa nếu có lỗi?
Cách khác, có cách nào khác mà chúng tôi có thể thực hiện để khắc phục sự cố tệp .d bị hỏng không? Một gợi ý dọc theo những dòng này là tạo ra các tệp .d với tên tạm thời và có một bước biên dịch sau mỗi tệp sao chép nó thành tên chính xác.
'.DELETE_ON_ERROR:' ở trên cùng của tệp makefile, hãy để tôi loại bỏ tất cả các tempfiles của tôi. Cảm ơn! –
Tôi khuyên bạn nên đặt mv làm dòng thứ hai trong công thức cho quy tắc mẫu "% .o:% .c".Tôi không thấy bất kỳ thay đổi nào về hành vi hoặc lợi ích khi sử dụng shell '&&' để đặt nó trên dòng đầu tiên. –
@RichardPerrin đề xuất của bạn sẽ tạo ra hành vi không chính xác nếu gmake được gọi với tùy chọn '-i' (bỏ qua lỗi). Trong trường hợp đó, phiên bản của bạn sẽ chạy lệnh 'mv' có hay không có lỗi trong' gcc', trong khi bản gốc của tôi sẽ không. –