Perbedaan antara `make clean` dan` make distclean`

25

Saya menginstal ffmpeg dari sumber dengan bantuan halaman ini. https://trac.ffmpeg.org/wiki/CentosCompilationGuide

Saya perhatikan bahwa sebagian besar panggilan tutorial ini make distcleansetelah make install. Tapi hanya panggilan libvpx make cleansetelah instalasi.

Menurut dokumen ini, http://www.gnu.org/software/automake/manual/automake.html#Clean make clean menghapus semua file yang makedibuat, dan make distcleanmenghapus semua file yang ./configuredibuat.

bersihkan

Hapus dari build tree file yang dibangun oleh make all.

buat distclean

Selain itu hapus apa pun ./konfigurasi dibuat.

Saya mengerti bahwa make distcleandipanggil untuk instalasi selanjutnya, tetapi saya tidak bisa mengerti mengapa make cleandipanggil setelah instalasi

Ffmpeg yang terinstal bekerja tanpa masalah. Jadi saya menanyakan pertanyaan ini karena saya hanya ingin meningkatkan pengetahuan saya tentang linux. Akan sangat membantu seseorang memberi saya penjelasan untuk itu.

pasir besi
sumber
2
Make clean disebut setelah instalasi untuk membersihkan. Tidak perlu menyimpan versi yang dikompilasi di dalam direktori tempat Anda mengkompilasi jika Anda masih memiliki kedua sumbernya (dan dengan demikian dapat menciptakannya kembali) dan program yang diinstal.
Hennes

Jawaban:

27

Parameter yang digunakan setelah makehanya tergantung pada pengembang yang menulis Makefile. Dokumentasi yang Anda rujuk kemudian, Autotools, hanyalah salah satu dari banyak cara untuk membuat Makefile.

Standar khasnya adalah make cleanakan menghapus semua file perantara, dan make distcleanmenjadikan struktur pohon seperti ketika tidak dicabut (atau sesuatu yang cukup dekat) termasuk menghapus semua skrip konfigurasi hasil keluaran. Ini adalah cara kerja kernel Linux misalnya.

Dengan kata lain, itu sepenuhnya tergantung pada pengembang untuk masing-masing perpustakaan itu, dan inilah sebabnya kadang-kadang cleandan lain kali itu distclean. By the way, Anda tidak perlu menjalankan clean/ distclean- Saya kira mereka menjalankannya hanya untuk menghemat ruang disk. make installbiasanya menyalin file ke direktori tujuan (sekali lagi bergantung pada pengembang) - biasanya tempat seperti /usr/libatau /usr/bin(juga ditentukan oleh skrip configure, jika itu merupakan sistem build Autotools)

Nuansa ini adalah alasan utama orang menggunakan sistem manajemen paket seperti paket RPM atau Debian.

EdH
sumber
Alasan utama orang menggunakan paket biner? Bagaimana dengan menghemat waktu?
x-yuri
6

Untuk pemahaman saya itu hanya untuk ruang disk yang aman. Setelah mengkompilasi beberapa program Anda akan memiliki banyak file, misalnya file objek yang tidak diperlukan lagi, karena mereka dihubungkan bersama dalam binari. Semua dapat diciptakan kembali dengan menghabiskan waktu CPU lagi.

Ambil contoh ini dengan ffmpegkode saat ini :

  • setelah mengkloning gitrepo, sumber membutuhkan 53 160 kB
  • setelah mengkonfigurasi jalankan 53 5332 kB
  • setelah kompilasi kami memiliki lebih dari 10 kali dari nilai awal: 673 668 kB
  • make clean mengurangi ini menjadi 53 636 kB
  • dan akhirnya setelah make distcleankami hampir berada di level setelah kloning: 53 188 kB
mpy
sumber
2

Mengapa langkah libvpx menggunakan make cleanalih-alihmake distclean

Pada saat penulisan panduan libvpx tidak memiliki aturan Makefileuntuk target distclean, jadi cleandigunakan sebagai gantinya.

Kenapa make (dist)cleandimasukkan setelahmake install

make distclean/ make cleandisertakan setelah masing-masing make installhanya sebagai tindakan pencegahan untuk memberikan "pembersihan" untuk pengguna yang kembali, mengubah opsi konfigurasi, dan mengkompilasi ulang (yang terjadi lebih sering daripada yang diharapkan).

Dalam versi sebelumnya dari panduan kompilasi, tanpa pencegahan make distclean, salah satu dari pengguna ini kadang-kadang akan menemukan hasil yang tidak terduga.

Bagaimana jika make distclean/ make cleanmemberikan kesalahan?

Seperti ini:

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

atau ini:

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

Abaikan itu. Ini berarti Anda kemungkinan berlari make distcleandua kali yang tidak berbahaya.

llogan
sumber
Perlu dicatat bahwa panduan ini sekarang digunakan make distcleanuntuk libvpx.
Hashim