Apakah ada aturan umum kapan Anda harus menggunakan 'make clean' dan bukan 'make'?

11

Saya sedang menulis beberapa program yang diajukan sekarang, dan tampaknya hanya menjalankan 'make' (seperti yang secara intuitif berpikir perlu dilakukan dalam kebanyakan situasi) karena beberapa alasan menyebabkan program saya gagal. Saya kira saya bisa memberikan detail masalah yang lebih banyak, tetapi yang penting adalah bahwa itu berjalan ketika menggunakan 'make clean'. Jadi saya bertanya-tanya apakah ada yang tahu aturan umum untuk menjalankan 'bersih' daripada hanya 'membuat'

Dark Templar
sumber

Jawaban:

17

Anda menjalankan make clean dalam dua situasi - ketika Anda ingin mengemas kode sumber (dan karena itu tidak perlu / ingin objek yang dibangun) ATAU ketika Anda memiliki beberapa alasan untuk percaya bahwa objek yang dibangun buruk.

Dalam kasus Anda, Anda menggunakan 'make clean' untuk memperbaiki masalah yang kemungkinan merupakan hasil dari Makefile yang bermasalah. Sesuatu di sana tidak mengkompilasi ulang kapan seharusnya, dan itu menyebabkan biner keluaran menjadi buruk.

Ada banyak alasan yang bisa terjadi, tergantung pada kerumitan proyek Anda, dan bagaimana Anda menggunakan make, tetapi intinya adalah: Anda perlu meluangkan waktu men-debug Makefile Anda.

Michael Kohne
sumber
6
Anda lupa "beberapa perubahan dalam lingkungan build" seperti compiler yang ditingkatkan, versi baru perpustakaan dll. Selalu merupakan ide yang baik untuk "membuat bersih" dalam kasus ini hanya untuk memastikan semua modul bernyanyi dari lembar lagu yang sama!
James Anderson
2
@JamesAnderson One bisa berargumen ini hanyalah contoh dari Makefile yang bermasalah.
Kristof Provost
4
@KristofProvost: Saya tidak yakin saya akan mengklasifikasikan "ABI Baru" (mungkin dengan memperkenalkan versi kompiler baru) sebagai 'Buggy Makefile'. Ini cukup di luar ruang lingkup dari apa yang saya harapkan 'buat' untuk dilihat.
Vatine
1
Benar, tetapi dimungkinkan (dan bahkan tidak terlalu sulit) untuk menambahkan kompiler ke makefiles sebagai prasyarat. Itu sudah cukup untuk menangkap masalah. Singkatnya, ini bukan masalah besar dan sangat jarang. Saya membuat titik karena saya telah menggunakan (dan menulis) makefile yang mengambil flag compiler dan semacamnya ke akun. Itu juga cukup jarang di makefile, tetapi sangat berguna (lebih dari memeriksa kompiler;)). Harapan saya akan makefile yang bagus dan ditulis dengan baik cukup tinggi. Harapan saya dari rata - rata makefile agak lebih rendah ...
Kristof Provost
8

Saya setuju dengan jawaban Michael Kohne secara umum. Saya akan menambahkan Anda perlu membaca dokumen instalasi untuk mengetahui apa yang "bersihkan" sebenarnya. Mungkin ada tingkat pembersihan berbeda yang mungkin perlu Anda gunakan, seperti "make realclean" dan "make distclean." Ada konvensi informal untuk ini, tetapi tidak ada yang diukir di batu.

Bill Ruppert
sumber
2
+1: "Anda perlu membaca dokumen instalasi untuk mengetahui apa yang" benar-benar bersih "sebenarnya. Tidak ada "aturan umum". Anda harus benar-benar membaca dokumen.
S.Lott
5

Saya mengerti bahwa ini adalah proyek Anda, jadi ini adalah proyek Anda makefile. Tujuan saya adalah untuk make selalu menghasilkan bangunan yang benar, jika memungkinkan untuk menghasilkannya. Jika make cleanperlu untuk pulih dari beberapa kondisi, maka menurut saya makefileitu salah, dan harus diperbaiki. Jika dependensi Anda telah dihitung dengan benar, maka sederhana makeharus mengkompilasi ulang semua yang perlu dikompilasi ulang.

kevin cline
sumber
2
Saya setuju. Ini tidak lagi menjadi masalah di hari-hari ini ruang disk yang hampir tak terbatas, tapi saya cukup tua untuk mengingat ketika membuat bersih dan membuat realclean digunakan terutama untuk menghemat ruang disk setelah executable terkait dibuat. Membuat GCC, apache, perl, dll meninggalkan banyak hal tergeletak di sekitar.
Bill Ruppert
1

Saya akan menjalankan "membuat bersih" sebelum membangun malam. Dalam hal ini waktu tambahan yang diperlukan untuk melakukan pembangunan penuh mungkin tidak akan terlalu menjadi masalah, tetapi keamanan tambahan yang Anda dapatkan dari memastikan semuanya dalam versi yang tepat mungkin sepadan.

Zachary K
sumber
Itu akan tergantung pada ukuran proyek Anda. Di mana saya menggunakan untuk bekerja membangun tambahan akan memakan waktu 2-4 jam dengan perubahan dari situs lain ditarik dalam semalam. Bangunan yang bersih membutuhkan waktu 7 hingga 9 jam. Selain itu, kami terkadang memiliki 2 atau 3 cabang yang ingin kami bangun. Bahkan pada mesin cepat, basis kode yang sangat besar perlu diperlakukan dengan sangat berbeda dengan yang lebih kecil.
TafT