sự khác biệt giữa `make clean` và` make distclean`


25

Tôi đã cài đặt ffmpeg từ các nguồn với sự giúp đỡ của trang này. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

Tôi nhận thấy rằng hầu hết các hướng dẫn này gọi make distcleansau make install. Nhưng chỉ gọi libvpx make cleansau khi cài đặt.

Theo tài liệu này, http://www.gnu.org/software/automake/manual/automake.html#Clean make clean xóa tất cả các tệp đã maketạo và make distcleanxóa tất cả các tệp đã ./configuretạo.

Làm sạch

Xóa khỏi cây xây dựng các tệp được tạo bằng cách tạo tất cả.

làm phiền

Ngoài ra xóa bất cứ thứ gì ./có thể tạo.

Tôi hiểu rằng nó make distcleanđược gọi cho cài đặt tiếp theo, nhưng tôi không thể hiểu tại sao make cleanđược gọi sau khi cài đặt.

Các ffmpeg được cài đặt hoạt động mà không có vấn đề. Vì vậy, tôi đã hỏi câu hỏi này bởi vì tôi chỉ muốn cải thiện kiến ​​thức của tôi về linux. Nó sẽ rất hữu ích khi ai đó cho tôi một lời giải thích cho nó.


2
Làm sạch được gọi sau khi cài đặt để dọn dẹp. Không cần phải giữ các phiên bản đã biên dịch xung quanh trong thư mục mà bạn đã biên dịch nếu bạn vẫn có cả nguồn (và do đó có thể tạo lại các phiên bản đó) và chương trình đã cài đặt.
Hennes

Câu trả lời:


27

Tham số được sử dụng sau makechỉ phụ thuộc vào (các) nhà phát triển đã viết Makefile. Tài liệu mà bạn tham khảo sau này, Autotools, chỉ là một trong nhiều cách để tạo Makefile.

Tiêu chuẩn điển hình là make cleansẽ loại bỏ tất cả các tệp trung gian và make distcleanlàm cho cây giống như khi nó không được dán (hoặc một cái gì đó khá gần) bao gồm loại bỏ bất kỳ đầu ra tập lệnh cấu hình nào. Đây là cách mà nhân Linux hoạt động chẳng hạn.

Nói cách khác, nó hoàn toàn phụ thuộc vào các nhà phát triển cho mỗi thư viện đó và đây là lý do tại sao đôi khi nó cleanvà các thời điểm khác distclean. Nhân tiện, bạn không cần phải chạy clean/ distclean- Tôi đoán họ có bạn chạy nó chỉ để tiết kiệm dung lượng đĩa. make installthường sao chép các tệp vào thư mục đích (một lần nữa phụ thuộc vào nhà phát triển) - thường là các vị trí như /usr/libhoặc /usr/bin(cũng được xác định bởi tập lệnh cấu hình, nếu đó là hệ thống xây dựng Autotools)

Những sắc thái này là lý do chính khiến mọi người sử dụng các hệ thống quản lý gói như gói RPM hoặc Debian.


Lý do chính mọi người sử dụng gói nhị phân? Còn tiết kiệm thời gian thì sao?
x-yuri

6

Theo hiểu biết của tôi, nó chỉ đơn giản là để không gian đĩa an toàn. Sau khi biên dịch một số chương trình, bạn sẽ có rất nhiều tệp, ví dụ: các tệp đối tượng không còn cần thiết nữa, vì chúng được liên kết với nhau trong các tệp nhị phân. Tất cả có thể được tạo lại bằng cách dành lại một chút thời gian CPU.

Lấy ví dụ này với ffmpegmã hiện tại :

  • Sau khi nhân bản gitrepo, nguồn mất 53 160 kB
  • sau khi cấu hình chạy, nó là 53 632 kB
  • sau khi biên dịch, chúng tôi có hơn 10 lần giá trị ban đầu: 673 668 kB
  • make clean giảm điều này xuống còn 53 636 kB
  • và cuối cùng sau khi make distcleanchúng tôi gần đạt mức ngay sau khi nhân bản: 53 188 kB

2

Tại sao bước libvpx sử dụng make cleanthay vìmake distclean

Tại thời điểm viết hướng dẫn libvpx không có quy tắc nào Makefilecho mục tiêu distclean, vì vậy cleanđã được sử dụng thay thế.

Tại sao make (dist)cleanđược bao gồm saumake install

make distclean/ make cleanđược bao gồm sau mỗi make installđơn giản chỉ là một biện pháp phòng ngừa để cung cấp "bảng xếp hạng sạch" cho người dùng quay lại, thay đổi tùy chọn cấu hình và biên dịch lại (xảy ra thường xuyên hơn dự kiến).

Trong phiên bản trước của hướng dẫn biên dịch, không có biện pháp phòng ngừa make distclean, một trong những người dùng này đôi khi gặp phải kết quả không mong muốn.

Điều gì xảy ra nếu make distclean/ make cleanđưa ra lỗi?

Như thế này:

Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

hoặc này:

make: *** No rule to make target 'distclean'.  Stop.

Đừng để ý đến nó. Nó chỉ có nghĩa là bạn có khả năng chạy make distcleanhai lần mà vô hại.


Đáng lưu ý rằng hướng dẫn hiện sử dụng make distcleancho libvpx.
Hashim
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.