Mengapa Makefiles Menyelamatkan Anda Dari Copy-Paste Perintah GCC

5

Jujur saja. Mengetik perintah kompilasi gcc yang panjang dengan tangan memang menyusahkan. Ini menjadi lebih buruk dengan cepat ketika basis kode Anda berkembang, mengimpor banyak perpustakaan, dan Anda terus-menerus mengubah berbagai hal. Anda berakhir dengan mimpi buruk salin-tempel yang rusak jika Anda melewatkan satu bendera.

Masukkan makefile.

Mereka ada karena satu alasan: untuk menghentikan Anda mengetik urutan kompilasi yang sama berulang kali secara manual. Daripada mengingat flag dan urutan file objek secara pasti, Anda menulis resep. Kemudian Anda tinggal mengetik make.

Cara Kerja Makefile Sebenarnya

Anda mulai dengan membuat file bernama makefile. Tidak ada ekstensi. Hanya namanya. Di dalamnya, Anda mendefinisikan dependensi.

Berikut adalah struktur dasar untuk proyek C kecil:

Perhatikan lekukannya. Di sinilah pemula tersandung. Spasi itu sebelum gcc? Itu harus berupa karakter tab. Bukan delapan spasi. Sebuah tab. Jika Anda menggunakan spasi, make akan menimbulkan kesalahan samar dan Anda akan menghabiskan sepuluh menit bertanya-tanya mengapa sintaksis Anda terlihat bagus di mata manusia tetapi tidak di mata mesin. Setiap baris perintah di bawah ketergantungan harus dimulai dengan sebuah tab. Definisi ketergantungan itu sendiri harus di sebelah kiri. Tidak ada pengecualian.

Logika Ketergantungan

Makefile memiliki dua jenis garis. Yang pertama adalah garis ketergantungan. Ini terlihat seperti target: prasyarat.

main.o: main.c util.h

Artinya: “Saya memerlukan main.o. Untuk mendapatkannya, saya memerlukan main.c dan util.h.”

Tipe kedua adalah baris yang dapat dieksekusi. Itu berada di bawah ketergantungan dan dimulai dengan sebuah tab. Ini adalah perintah yang dijalankan jika make memutuskan perlu membangun kembali.

Sistem ini bekerja dengan prinsip sederhana: jika ada file di sisi kanan titik dua yang lebih baru daripada file di sebelah kiri, jalankan perintah di bawah ini. Ubah util.h? make melihatnya, mengetahui main.o dan util.o bergantung padanya, dan membangunnya kembali. Ini mengotomatiskan logika.

Aturan Sasaran

Ada satu aturan emas untuk bagian atas makefile Anda. Target pertama yang terdaftar adalah target yang make coba buat secara default.

Pada contoh di atas, main adalah baris pertama. Jadi ketika Anda menjalankan make tanpa argumen, itu akan membangun executable akhir.

utama: main.o util.o
gcc -o main main.o util.o

Jika Anda mengubah main.o, ini akan memicu pembangunan kembali main. Jika Anda mengubah main.c, ini akan memicu main.o, yang kemudian memicu main. Ini adalah reaksi berantai. Anda tidak perlu mengelolanya. Anda cukup mengedit kode sumber Anda dan menjalankan make.

Bagaimana Jika Saya Tidak Menggunakan Unix?

Jika Anda menggunakan Windows atau menggunakan IDE seperti Visual Studio atau Xcode, Anda mungkin tidak melihat makefile dalam pengertian tradisional. Jangan panik. Kompiler Anda mungkin memiliki fungsi yang setara.

Lingkungan pengembangan terintegrasi sering kali memiliki sistem yang dibangun. Cari “Bangun Konfigurasi” atau “Properti Proyek”. Mereka melakukan hal yang sama: melacak dependensi dan hanya mengkompilasi ulang apa yang berubah. Namun jika Anda tetap menggunakan baris perintah, make adalah standarnya.

Gambaran Yang Lebih Besar

Menggunakan make tidak