Có một quy tắc chung khi nào bạn nên sử dụng 'làm sạch' thay vì chỉ 'làm'?


11

Tôi đang viết một chương trình nhiều tệp ngay bây giờ và dường như chỉ chạy 'make' (như người ta nghĩ theo trực giác cần phải được thực hiện trong hầu hết các tình huống) vì một số lý do khiến chương trình của tôi thất bại. Tôi đoán tôi có thể cung cấp chi tiết hơn về vấn đề, nhưng điều quan trọng là nó có chạy khi sử dụng 'làm sạch'. Vì vậy, tôi đã tự hỏi nếu có ai biết quy tắc chung cho việc chạy 'làm sạch' thay vì chỉ 'làm'

Câu trả lời:


17

Bạn chạy làm sạch trong hai tình huống - khi bạn muốn đóng gói mã nguồn (và do đó không cần / muốn các đối tượng được xây dựng) HOẶC khi bạn có một số lý do để tin rằng các đối tượng được xây dựng là xấu.

Trong trường hợp của bạn, bạn đang sử dụng 'làm sạch' để khắc phục sự cố có thể là do lỗi Makefile. Một cái gì đó trong đó không được biên dịch lại khi cần, và điều đó làm cho nhị phân đầu ra bị xấu.

Có nhiều lý do có thể xảy ra, tùy thuộc vào mức độ phức tạp của dự án của bạn và cách bạn đã sử dụng, nhưng ý chính của nó là: bạn cần dành thời gian để gỡ lỗi Makefile của mình.


6
Bạn quên "một số thay đổi trong môi trường xây dựng" như trình biên dịch nâng cấp, phiên bản mới của thư viện, v.v. luôn luôn là một ý tưởng tốt để "làm sạch" trong những trường hợp này chỉ để đảm bảo tất cả các mô-đun đang hát từ cùng một bài hát!
James Anderson

2
@JamesAnderson Người ta có thể tranh luận đây chỉ là những trường hợp lỗi của Makefiles.
Kristof Provost

4
@KristofProvost: Tôi không chắc chắn tôi có lớp "ABI mới" (có thể bằng cách giới thiệu phiên bản trình biên dịch mới) là 'buggy Makefile'. Nó đủ bên ngoài phạm vi của những gì tôi mong đợi 'tạo ra' để xem xét.
Vatine

1
Đúng, nhưng có thể (và thậm chí không khó lắm) để thêm trình biên dịch vào tệp tạo tệp làm điều kiện tiên quyết. Thế là đủ để nắm bắt vấn đề. Tất cả trong tất cả nó không phải là một vấn đề lớn và dù sao nó cũng rất hiếm. Tôi đã đưa ra quan điểm vì tôi đã sử dụng các tệp tạo tệp (và bằng văn bản) có sử dụng cờ trình biên dịch và như vậy. Điều đó cũng khá phổ biến trong makefiles, nhưng rất hữu ích (hơn cả việc kiểm tra trình biên dịch;)). Kỳ vọng của tôi về các makefile tốt, được viết tốt là khá cao. Kỳ vọng của tôi về makefile trung bình khá thấp ...
Kristof Provost

8

Tôi đồng ý với câu trả lời của Michael Kohne nói chung. Tôi sẽ thêm bạn cần đọc các tài liệu cài đặt để biết "làm sạch" thực sự làm gì. Có thể có các mức độ sạch khác nhau mà bạn có thể cần phải sử dụng, chẳng hạn như "tạo realclean" và "make distclean". Có những quy ước không chính thức cho những điều này, nhưng không có gì được khắc trên đá.


2
+1: "bạn cần đọc tài liệu cài đặt để biết" làm sạch "thực sự làm gì". Không có "quy tắc chung". Bạn phải thực sự đọc các tài liệu.
S.Lott

5

Tôi hiểu rằng đây là dự án của bạn, vì vậy nó là của bạn makefile. Mục tiêu của tôi là make luôn tạo ra một bản dựng chính xác, nếu có thể sản xuất một bản dựng. Nếu make cleancần thiết để phục hồi từ một số điều kiện, thì theo tôi đó makefilelà sai, và nên được sửa chữa. Nếu các phụ thuộc của bạn đã được tính toán chính xác, thì đơn giản makesẽ biên dịch lại mọi thứ cần được biên dịch lại.


2
Tôi đồng ý. Nó không còn là vấn đề trong những ngày không gian đĩa gần như vô hạn, nhưng tôi đủ tuổi để nhớ khi dọn dẹp và làm cho realclean được sử dụng chủ yếu để tiết kiệm dung lượng ổ đĩa sau khi thực thi được liên kết được tạo. Làm cho GCC, apache, perl, vv để lại rất nhiều thứ xung quanh.
Bill Ruppert

1

Tôi sẽ chạy "làm sạch" trước khi xây dựng hàng đêm. Trong trường hợp đó, thời gian bổ sung cần thiết để xây dựng toàn bộ có thể sẽ không quan trọng lắm, nhưng sự an toàn bổ sung mà bạn sẽ nhận được từ việc đảm bảo mọi thứ ở phiên bản phù hợp có lẽ đáng giá.


Điều đó sẽ phụ thuộc vào quy mô của dự án của bạn. Nơi tôi sử dụng để làm việc xây dựng gia tăng sẽ mất 2-4 giờ với các thay đổi từ các trang web khác được thực hiện trong một đêm. Một bản dựng sạch có thể mất 7 đến 9 giờ. Trên hết, đôi khi chúng tôi có 2 hoặc 3 chi nhánh mà chúng tôi muốn xây dựng. Ngay cả trên các máy nhanh, các cơ sở mã rất lớn cần được xử lý hoàn toàn khác với các máy nhỏ hơn.
TafT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.