GNU Make adalah alat yang membantu menghasilkan program yang dapat dilaksanakan dari kod sumber dan juga memproses fail bukan sumber lain dari projek. Make mendapat logik membina eksekusi dan memproses fail bukan sumber lain dari fail bernama a makefile atau a Makefile.
Kenapa Buat?
-
Make adalah alat de-facto untuk membina program yang dapat dilaksanakan dari kod sumber dalam dunia sumber terbuka.
-
Make membolehkan pengguna akhir membina program yang boleh dilaksanakan tanpa mengetahui perincian teknikal tentang cara membuatnya.
-
Semua perincian cara membina eksekusi dan memproses fail bukan sumber disenaraikan dalam makefile - sehingga proses itu dapat diulang oleh semua orang atau sistem yang berusaha membina projek.
-
Sekiranya pangkalan kode sangat besar maka memakan masa dan bermasalah membina yang dapat dilaksanakan dari awal apabila perubahan kod sumber sangat kecil. Buat mengurus itu. Ini mengesan fail mana yang diubah dan menyelesaikan kebergantungan yang sesuai untuk membangun kembali bahagian tertentu dari program.
-
Make adalah pengaturcaraan bahasa agnostik. Tidak peduli bahasa pengaturcaraan atau dialek mana yang anda gunakan. Makefile adalah fail teks perintah shell yang disusun secara struktural dengan ketergantungan dan logik lain untuk membina program dan menguruskan fail bukan sumber lain. Oleh kerana ia adalah sekumpulan perintah shell, ia dapat dijalankan di mana sahaja perintah shell dijalankan. Windows tidak menjalankan perintah shell linux secara lalai, tetapi anda boleh melakukannya dengan versi khusus untuk Windows.
-
Semasa membina program yang dapat dilaksanakan, banyak fail perantaraan dibuat yang tidak perlu ada ketika bangunan selesai. Buat penghapusan fail tersebut secara automatik. Ia membantu menjaga kebersihan persekitaran dan menjimatkan banyak masa berharga.
Memasang Membuat
Membuat sendiri tidak cukup untuk membina program. Untuk membina program dari sumber, anda perlu memasang penyusun dan alat lain pada sistem anda. Oleh itu, kami memerlukan rangkaian alat pembangunan yang lengkap untuk tujuan kami.
Untuk menyusun sumber di Linux, ada paket yang disebut "build-essential" pada sistem berasaskan Debian (e.g. Ubuntu, Linux Mint, dll) dan "Alat Pembangunan" di Red Hat dan CentOS.
Untuk memasangnya pada sistem berasaskan Debian:
apt-get install build-mustahak
Untuk memasangnya di CentOS dan Red Hat jalankan:
yum groupinstall "Alat Pembangunan"
Bermula dengan Makefile
Mari mulakan dengan menulis a Hai dunia atur cara dengan bahasa pengaturcaraan C.
Fungsi utama program C kami akan berada di dalamnya neraka.c. Kandungan fail kelihatan seperti berikut:
#sertakanint utama () my_fun (); pulangan 0;
Kod ini merangkumi fail header hellofun.h yang mengandungi pengisytiharan fungsi yang disebut hello_fun (). Kandungan hellofun.h adalah:
batal my_fun ();
Definisi my_fun () tinggal di dalam hellofun.c:
#sertakan#sertakan batal my_fun () printf ("Hello World!\ n "); kembali;
Ini adalah program yang sangat mudah dan kami dapat menyusunnya dengan gcc hanya dengan satu baris perintah. Tetapi, program kehidupan sebenar tidak sesederhana dan sekecil ini. Segala-galanya menjadi tidak lama lagi. Di bawah ini, saya akan menulis skrip makefile yang diperlukan untuk menyusun program hello world ini. Saya akan menerangkan bahagian-bahagiannya yang berlainan di bahagian-bahagian berikutnya.
hellomain: hellomain.c hellofun.c gcc -o hello hellomain.c Hellomain.c-Saya.
Simpan kod ini dalam fail yang disebut makefile (tanpa perluasan fail). Masukkan fail ke dalam direktori di mana fail C berada. Arahkan baris arahan anda ke dalam direktori ini. Pada baris arahan tuliskan dan tekan enter. Fail yang boleh dilaksanakan yang dipanggil hello akan dihasilkan di direktori semasa. Anda boleh mengesahkan hasilnya dengan menjalankan perintah yang boleh dilaksanakan dengan perintah berikut.
./ salam
Keluaran:
Hai dunia!
Peraturan, Sasaran dan Kebergantungan
Skrip makefile adalah kumpulan peraturan. Peraturan memerintahkan Membuat cara membina sasaran atau output dari sumber atau fail lain. Peraturan tersebut juga menentukan ketergantungan sasaran. Peraturan pergantungan mesti dilaksanakan terlebih dahulu bergantung pada apakah itu sudah diproses dengan melihat cap waktu. Dalam contoh kita makefile di atas, kita mempunyai peraturan dengan sasaran yang dinamakan neraka dan kebergantungannya. Nama sasaran dipisahkan oleh titik dua dari senarai kebergantungan. Perintah shell yang akan dilaksanakan disenaraikan dalam baris berikut. Perintah shell mesti bermula dengan watak tab.
Sekiranya anda tidak menentukan parameter dengan perintah make maka sasaran pertama akan dijalankan. Dalam contoh kami, kami tidak menentukan parameter apa pun dan kami ada neraka sebagai sasaran pertama dan satu-satunya.
Pemboleh ubah
Pemboleh ubah adalah kaedah menulis nilai yang bagus sekali dan menggunakannya berkali-kali tanpa mengulang nilainya berulang kali. Ini membantu kita menjaga kod kita KERING (Jangan Ulangi Diri Sendiri). Sekiranya anda perlu mengubah beberapa nilai di seluruh skrip, anda hanya perlu mengubahnya di satu tempat untuk menunjukkan perubahan di mana sahaja jika anda menggunakan pemboleh ubah.
Dalam contoh kami menggunakan gcc sebagai penyusun, tetapi kita mungkin perlu mengubah penyusun menjadi perkara lain. Jadi, kita boleh menyimpan nama penyusun dalam pemboleh ubah. Kita juga boleh menyimpan bendera penyusun dalam pemboleh ubah lain untuk menggunakannya semula. Untuk menetapkan nilai ke pemboleh ubah kami menggunakan tanda sama (=) dan untuk membaca pemboleh ubah itu kami menggunakan $ (variabel_name).
CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o hello hellomain.c Hellomain.c $ (CFLAGS)
Membersihkan Persekitaran
Kita sering kali perlu membersihkan persekitaran kita. Sekiranya kita mahu setiap bahagian projek kita dibina semula dari awal, kita perlu membersihkannya. Dalam contoh ringkas kami, satu-satunya fail yang dihasilkan adalah hello boleh dilaksanakan. Tanpa menghapusnya secara manual, kita dapat menghapusnya dengan membuat. Oleh itu, kita dapat membuat peraturan untuk itu dan menamakan sasaran sebagai bersih.
CC = gcc CFLAGS = -I. hellomain: hellomain.c hellofun.c $ (CC) -o hello hellomain.c Hellomain.c $ (CFLAGS) bersih: rm hello
Perintah shell dalam target bersih hanyalah perintah shell berusia rm. Sekarang, dari baris arahan jalankan:
buat bersih
Lihat direktori semasa untuk melihat bahawa hello fail yang boleh dilaksanakan habis.
Memperluas Contoh Kami Untuk Menyelesaikan Lebih Banyak Masalah
Dalam contoh kompilasi dunia hello sederhana kami, kami mempunyai masalah yang belum dapat kami selesaikan. neraka sasaran melihat ahli neraka.c dan neraka.c cap masa fail pada masa berikutnya anda mencuba menyusunnya semula membuat atau buat Hellomain. Oleh itu, jika anda menukar salah satu daripada dua fail tersebut, fail tersebut akan dikompilasi ulang. Tetapi, jika anda berubah neraka.h maka ia tidak akan menyusun semula. Itu tidak dijangka!
Sekali lagi, kami telah melangkau tahap pertengahan. Kami tidak menghasilkan fail objek dan secara langsung menghasilkan yang boleh dilaksanakan. Tetapi, di belakang tabir fail objek dibuat dalam direktori sementara dan dihapus. Kami ingin menghasilkan fail objek sebelum membina yang boleh dilaksanakan. Kali ini kami menamakan sasaran utama sebagai semua
semua: hellomain.o neraka.o gcc hellomain.o neraka.o -o hello hellomain.o: hellomain.c hellofun.h gcc -I. -c Hellomain.c hellofun.o: hellofun.c hellofun.h gcc -I. -c hellofun.c bersih: rm -rf *.o rm hello
Jalankan perintah make sekali lagi untuk melihat apakah program anda berjaya dibuat atau tidak. Jalankan hello yang dapat dilaksanakan untuk mengesahkan hasilnya. Lihat direktori semasa dan anda akan melihat bahawa fail objek dibuat. Kami telah menambahkan satu baris lagi ke sasaran bersih untuk membersihkan fail objek. Skrip makefile ini akan membantu menyusun semula program hello world walaupun neraka.h fail diubah suai.
Kesimpulannya
Make adalah salah satu alat yang paling penting untuk pengguna dan pengaturcara linux. Sekiranya anda pengguna akhir, pengetahuan tentang pembuatan akan membantu anda memperbaiki banyak perkara yang rosak di dunia linux anda. Sekiranya anda seorang pengaturcara maka anda tidak boleh berjalan dengan menulis kod tersebut dan membiarkan pengguna anda mengetahui cara menyusun kod sumber tersebut ke yang dapat dilaksanakan. Anda mesti membuat skrip makefile untuk pengguna akhir, agar mereka tidak memainkan permainan meneka untuk menyusun sumber anda ke yang dapat dieksekusi.
Rujukan
Halaman Utama Projek GNUMake
GNU Buat Dokumentasi