Buat saya tampak seperti skrip shell dengan penanganan argumen baris perintah yang sedikit lebih mudah.
Mengapa standar untuk menjalankan make daripada ./make.sh
Buat saya tampak seperti skrip shell dengan penanganan argumen baris perintah yang sedikit lebih mudah.
Mengapa standar untuk menjalankan make daripada ./make.sh
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 - menggunakan make
, 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.
Ada berbagai hal yang dapat dilakukan yang sulit dilakukan dengan skrip shell ...
Pastikan bahwa hanya file yang diperlukan yang dikompilasi ulang saat Anda membuat perubahan pada file sumber Anda.
Sebagai contoh:
final : 1.o 2.o
gcc -o final 1.o 2.o
1.o : 1.c 2.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
Jika saya hanya mengubah file 2.h
& menjalankan make
, itu mengeksekusi semua 3 perintah, dalam urutan terbalik.
Jika saya hanya mengubah file 1.c
& menjalankan make
, itu hanya menjalankan 2 perintah pertama dalam urutan terbalik.
Mencoba untuk mencapai itu dengan skrip shell Anda sendiri akan melibatkan banyak if/else
pemeriksaan.
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.
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.