Saya telah melihat bahwa make
ini berguna untuk proyek-proyek besar, terutama dengan dependensi membingungkan yang dijelaskan dalam Makefile
, dan juga membantu dengan alur kerja. Saya belum pernah mendengar keuntungan menggunakan make
proyek kecil. Apakah ada?
scripting
compiling
make
development
Goodwin Lu
sumber
sumber
make
untuk menemukan jawabannya. membuat templat Makefile yang layak dan hanya mengedit variabel file sumbernya. tidak perlu mengetik semua jazz itu.make
adalah perintah yang jauh lebih cepat untuk diketik daripada kebanyakan orang lain, bahkan jika Anda tidak membuat Makefile yang cerdas untuk menangani dependensi dengan bersih :-)Jawaban:
Bertentangan dengan apa?
Misalkan Anda memiliki program yang telah Anda bagi menjadi dua file, yang Anda beri nama secara imajinatif
file1.c
danfile2.c
. Anda dapat mengkompilasi program dengan menjalankanTetapi ini membutuhkan kompilasi ulang kedua file setiap kali, bahkan jika hanya satu yang berubah. Anda dapat menguraikan langkah kompilasi menjadi
dan kemudian, ketika Anda mengedit salah satu file, kompilasi ulang hanya file itu (dan lakukan langkah menghubungkan apa pun yang Anda ubah). Tetapi bagaimana jika Anda mengedit satu file, dan yang lainnya, dan Anda lupa bahwa Anda mengedit kedua file, dan secara tidak sengaja mengkompilasi ulang satu file saja?
Juga, bahkan untuk hanya dua file, Anda memiliki perintah senilai sekitar 60 karakter di sana. Itu cepat membosankan untuk mengetik. Oke, tentu saja, Anda bisa memasukkannya ke dalam skrip, tetapi kemudian Anda kembali mengkompilasi ulang setiap waktu. Atau Anda bisa menulis skrip rumit yang mewah yang memeriksa file apa yang telah dimodifikasi dan hanya melakukan kompilasi yang diperlukan. Apakah Anda melihat ke mana saya akan pergi dengan ini?
sumber
gcc -O3 -march=native -fwhole-program *.c
pada dasarnya baik untuk siklus edit / kompilasi / profil. Tetapi Anda masih menginginkan Makefile untuk digunakan orang lain . Mampu menggunakan-fwhole-program
adalah keuntungan yang menyenangkan dari kompilasi semuanya, tetapi-flto
biasanya memberi Anda cukup banyak optimasi yang sama.Banyak orang masuk ke detail makefile yang lebih kompleks dan banyak kerumitan yang menyertai mereka. Saya biasanya menggunakan makefile untuk alasan yang sangat berbeda:
Saya tidak ingin mengingat apa pun.
Bahkan jika proyek Anda benar-benar membosankan dan sederhana, dan Anda tidak menggunakan makefile "dengan benar":
Saya tidak perlu memikirkannya atau memperlakukannya berbeda dari proyek yang lebih kompleks:
Atau jika saya menentukan flag (mis.
-O2
) Saya tidak perlu mengingat apa itu.Juga, jika Anda mulai dengan makefile sederhana, dan Anda perlu menggabungkan / memperbaiki hal-hal nanti, Anda tidak perlu ingat untuk membangun setiap proyek secara berbeda.
sumber
Bahkan dengan proyek kecil akan sangat membantu menjaga logika dependensi tetap terkendali dan membangun otomatis. Saya juga menggunakannya untuk memicu instal dan deinstalasi, jadi itu adalah saklar utama yang mengatur ulang panggung.
sumber
Jika Anda menautkan aplikasi dari 2 sumber (
.c
file), Anda tidak perlu mengkompilasi ulang setiap file, tetapi hanya yang diubah jika Anda menggunakan make.Juga, saya akan memberi Anda contoh dari dunia BSD. Mereka memiliki kerangka Makefiles berbasis sistem. Mereka memberi Anda jalur ke direktori sistem dan memiliki target untuk menginstal perangkat lunak dan halaman manual Anda.
Misalnya, Anda baru saja menulis
beer.c
aplikasi dan manual untuk itu disebutbeer.6
. Anda membuatMakefile
:..dan panggilan
make install
. Secara otomatis mengkompilasi dan menginstal aplikasi Anda ke/usr/bin
dan mengkompilasi dan menginstal halaman manual Anda ke tempat di manaman
dapat menemukannya. Anda baru saja menginstal aplikasi Anda dengan satu perintah sederhana!Sangat nyaman dan benar-benar transparan bagi siapa saja yang akrab dengan BSD. Jauh lebih baik daripada skrip manual.
sumber
Contoh
Makefile
untuk proyek saya yang sangat kecil:getPixelColor
Itu tidak persis apa yang dikatakan namanya, mengambil dua argumen opsional, koordinat.
Saya terutama suka bagaimana hal-hal menjadi tergantung di sana.
Seperti yang Anda lihat, ini dapat melakukan semua yang Anda butuhkan, tanpa mengetikkan tambahan:
Pemakaian
Anda dapat menjalankannya dengan cara ini:
Bersihkan biner lama:
Kompilasi biner baru:
Jalankan executable dengan 2 cara:
koordinat default [0,0]
koordinat yang diberikan
Makefiles terkadang sangat membantu. Semakin besar proyek, semakin besar manfaatnya. Tetapi bahkan dengan proyek C ++ terkecil saya, seperti yang Anda lihat pada contoh menghemat banyak sakit kepala.
sumber
make
tersedia cukup andal. Jika Anda mendistribusikan proyek Anda dengan amakefile
, pengguna akan memiliki referensi sederhana tentang cara mencapai tugas dengan cara yang sama Anda lakukan. Themakefile
bisa untuk lebih dari sekedar kompilasi.Ambil proyek yang tidak memerlukan kompilasi, misalnya. Saya ingat pernah bekerja pada proyek Python yang memiliki perintah make untuk menghapus semua
.pyc
file, perintah make untuk menjalankan tes, satu untuk mengunduh salinan data statis dari server pengembangan, dll.sumber