Buat saya tampak seperti skrip shell dengan penanganan argumen baris perintah yang sedikit lebih mudah.
Mengapa standar untuk menjalankan make daripada ./make.sh
shell
makefile
compilation
HoboBen
sumber
sumber
Jawaban:
Ide umumnya adalah yang
make
mendukung (cukup) pembangunan ulang minimal - yaitu, Anda memberi tahu bagian mana dari program Anda yang bergantung pada bagian mana yang lain. Ketika Anda memperbarui beberapa bagian dari program, itu hanya membangun kembali bagian-bagian yang bergantung padanya. Meskipun Anda dapat melakukan ini dengan skrip shell, ini akan menjadi lebih banyak pekerjaan (secara eksplisit memeriksa tanggal terakhir diubah pada semua file, dll.) Satu-satunya alternatif yang jelas dengan skrip shell adalah membangun kembali semuanya setiap saat. Untuk proyek kecil, ini adalah pendekatan yang masuk akal, tetapi untuk proyek besar, pembangunan kembali lengkap dapat dengan mudah memakan waktu satu jam atau lebih - menggunakanmake
, Anda dapat dengan mudah mencapai hal yang sama dalam satu atau dua menit ...Saya mungkin juga harus menambahkan bahwa ada beberapa alternatif untuk dibuat yang setidaknya memiliki kemampuan yang mirip. Terutama dalam kasus di mana hanya beberapa file dalam proyek besar yang sedang dibangun kembali, beberapa di antaranya (misalnya, Ninja ) seringkali jauh lebih cepat daripada buatan.
sumber
Make adalah sistem pakar
Ada berbagai hal yang dapat dilakukan yang sulit dilakukan dengan skrip shell ...
sumber
Pastikan bahwa hanya file yang diperlukan yang dikompilasi ulang saat Anda membuat perubahan pada file sumber Anda.
Sebagai contoh:
Jika saya hanya mengubah file
2.h
& menjalankanmake
, itu mengeksekusi semua 3 perintah, dalam urutan terbalik.Jika saya hanya mengubah file
1.c
& menjalankanmake
, itu hanya menjalankan 2 perintah pertama dalam urutan terbalik.Mencoba untuk mencapai itu dengan skrip shell Anda sendiri akan melibatkan banyak
if/else
pemeriksaan.sumber
rsync -r -c -I $SOURCE $DEST_DIR
di shell.Seperti di atas, Make adalah bahasa pemrograman paralel deklaratif (-ish).
Katakanlah Anda memiliki 4.000 file grafik untuk diubah dan 4 CPU. Cobalah menulis skrip shell 10 baris (saya bermurah hati di sini) yang akan melakukannya dengan andal sambil memenuhi CPU Anda.
Mungkin pertanyaan sebenarnya adalah mengapa orang repot-repot menulis skrip shell.
sumber
make handle dependencies: makefile menjelaskannya: biner bergantung pada file objek, setiap file objek bergantung pada file sumber dan header ... saat make dijalankan, tanggal file dibandingkan untuk menentukan apa yang perlu dikompilasi ulang .
Seseorang dapat memanggil secara langsung satu target untuk tidak membangun semua yang dijelaskan dalam Makefile.
Selain itu, sintaks make menyediakan substitusi, vpath
Semua ini dapat ditulis dalam skrip shell, dengan make Anda sudah memilikinya.
sumber