Mengetik perintah gcc yang panjang berulang kali memang menyakitkan. Ini menjadi lebih buruk ketika Anda menambahkan perpustakaan atau mengubah kode terus-menerus. Makefile perbaiki ini. Mereka mengotomatiskan proses pembuatan sehingga Anda berhenti mengetik perintah yang sama berulang kali.
Berikut adalah contoh Makefile sederhana. Ini menggantikan urutan kompilasi manual.
Simpan ini dalam file bernama makefile. Jalankan make untuk membuat file yang dapat dieksekusi. Ada satu aturan ketat. Anda harus menggunakan karakter tab sebelum setiap baris gcc. Delapan spasi akan gagal. Alat build akan menolaknya. Semua baris lainnya harus dimulai dari margin kiri.
Memahami Ketergantungan
Makefile memiliki dua jenis garis. Garis flush-left adalah garis ketergantungan. Mereka mendefinisikan hubungan antar file. Baris bertab adalah perintah yang dapat dieksekusi. Ini bisa berupa perintah UNIX apa pun yang valid.
Ambil baris ini:
main.o: main.c util.h
Dikatakan main.o bergantung pada main.c dan util.h. Jika salah satu file sumber berubah, perintah di bawahnya akan dijalankan. Ini menciptakan kembali main.o.
Baris pertama dalam file itu spesial. Ini mendefinisikan target akhir. Dalam hal ini, itu adalah main yang dapat dieksekusi. Ini mencantumkan main.o dan util.o sebagai dependensi. Jika file objek tersebut lebih baru dari sumbernya, Make akan membangunnya kembali. Kemudian ia menghubungkannya ke dalam biner terakhir.
Perintah ini hanya berjalan jika dependensinya berubah. Jika tidak ada yang berubah, Make tidak melakukan apa pun. Itulah manfaat intinya. Ini melewatkan pekerjaan yang sudah selesai.
Mengapa Ini Penting untuk Alur Kerja Anda
Program besar memiliki banyak perpustakaan dan file sumber. Melacak file mana yang diubah secara manual rawan kesalahan. Makefile menangani ini secara otomatis. Itu hanya mengkompilasi ulang apa yang diperlukan. Anda mengubah satu file header. Lakukan pembangunan kembali setiap file sumber yang menyertakannya. Anda mengubah fungsi utilitas. Lakukan pembangunan kembali hanya file objek itu dan tautkan kembali file yang dapat dieksekusi.
Anda tidak perlu menggunakan sistem UNIX untuk menggunakan logika ini. Kebanyakan kompiler dan IDE modern menyertakan fitur serupa. Periksa dokumentasi kompiler Anda. Cari alat otomatisasi pembangunan. Mereka bekerja dengan cara yang sama di bawah tenda.
Ini membawa kita kembali ke header seperti stdio.h. Anda memasukkannya ke dalam contoh sebelumnya tanpa menjelaskan alasannya. Itu adalah perpustakaan standar. Seseorang menulisnya bertahun-tahun yang lalu. Mereka menyediakannya untuk menyelamatkan Anda dari menciptakan kembali fungsi-fungsi dasar. Makefile dan perpustakaan standar adalah bagian dari filosofi yang sama. Mereka membiarkan Anda fokus pada logika, bukan pada boilerplate.
Alat ini hanya akan berfungsi jika aturannya sesuai. Jika dependensi Anda salah, Make akan gagal membangun kembali sebagaimana mestinya. Atau lebih buruk lagi, itu akan membuat kode yang ketinggalan jaman. Periksa karakter tab Anda. Verifikasi nama file Anda. Dapatkan sintaks yang benar dan kompiler akan melakukan pekerjaan berat.
Anda mungkin bertanya-tanya apakah kompilasi manual lebih cepat. Untuk satu file, mungkin. Namun begitu Anda menyentuh header dalam proyek multi-file, metode manualnya hilang. Anda mulai menyalin perintah. Anda mulai membuat kesalahan ketik. Anda mulai bertanya-tanya mengapa main.o tidak diperbarui.
Peralihan dari mengetik perintah ke menentukan aturan adalah keuntungan nyata. Anda mendefinisikan negara bagian. Alat ini menerapkan transisi. Ini adalah perubahan kecil dalam kebiasaan. Ini terbayar di setiap pembangunan berikutnya.

























