Saya bekerja di c ++ sebagian besar sebagai hobi (saya masih di sekolah dan karenanya tidak memiliki pekerjaan nyata). IDE menghasilkan makefile untuk saya dan jadi saya bertanya-tanya apakah itu layak belajar bagaimana membuatnya sendiri. Maksud saya "layak belajar", haruskah saya meninggalkan semuanya dan belajar menulisnya sebelum melanjutkan belajar c ++? Apakah mempelajarinya akan sangat diperlukan? Jika demikian, haruskah saya mempelajarinya (sintaksis umum dan memahami cara kerjanya dll.) Atau benar-benar belajar cara menulisnya?
12
Jawaban:
Ya, sangat layak untuk memahami bagaimana Makefiles bekerja. Ini mungkin tidak relevan bagi Anda saat ini (karena Anda menggunakan IDE yang menghasilkan mereka), tetapi kemungkinannya adalah bahwa pengetahuan tersebut akan berguna di masa depan.
Terus terang, itu adalah gagasan aneh "layak dipelajari" ...
Tapi tidak, saya pikir Anda tidak perlu melakukan itu.
Kami tidak dapat memprediksi apakah Anda benar-benar membutuhkan pengetahuan ini di masa mendatang. Itu tergantung pada apakah Anda melanjutkan pemrograman C ++ dan dalam konteks apa Anda melakukannya.
Saya akan merekomendasikan keduanya. Jika Anda tidak dapat menulis Makefile, Anda dapat mengetahui apa yang sedang terjadi.
Ada sudut pandang lain yang mengatakan bahwa terlalu banyak pengetahuan tidak membantu.
Jika Anda mempelajari ini dengan mendalam, Anda akan belajar bahwa ada banyak versi Make yang berbeda, dan menulis Makefile yang rumit yang bekerja dengan banyak versi Make di berbagai platform adalah ... sulit. Namun, di dunia open source, itu adalah "praktik terbaik" untuk menggunakan alat-alat seperti
automake
,autoconf
dan sebagainya untuk menghasilkan makefile, dll. Jika Anda melakukannya, banyak versi / platform terkait kompleksitas ditangani di belakang layar .Akhirnya, Anda menandai pertanyaan dengan "java". Pendapat saya adalah bahwa Anda tidak boleh menggunakan
make
untuk membangun aplikasi Java (kecuali jika Anda juga membangun pustaka kode asli). Ada alat membangun spesifik Java yang jauh lebih mudah digunakan ... dan melakukan pekerjaan yang lebih baik daripadamake
.sumber
Jika Anda bekerja dengan sistem operasi open source atau mirip Unix, ya. Meskipun hati, mereka tidak rumit. Belajar
make
akan menghemat banyak waktu dalam jangka panjang.sumber
Makefile penting pada sistem UNIX (mis. AIX, Linux, OS X). Namun, saya berpikir bahwa kepentingan absolut mereka "Anda harus tahu" telah berkurang dalam beberapa tahun terakhir. Misalnya, Anda tidak benar-benar menemukannya dalam pengembangan Windows (Visual Studio, dll.) Dan XCode (pada OS X) menggunakan sistem yang berbeda sama sekali. Saya tidak banyak ke Jawa, tetapi di sana saya pikir mereka menggunakan file semut dan yang lainnya.
Ada sistem yang sangat keren yang disebut CMake yang menghasilkan file build asli untuk sistem operasi yang sedang Anda jalankan. Misalnya, jika Anda menulis spesifikasi proyek Anda di CMake, maka Anda dapat membuat proyek pembangunan Visual Studio di Windows, proyek XCode di Mac, dan Makefile di Linux. Di satu sisi, CMake menggantikan autoconf dan automake.
Saya biasanya membuat file CMake untuk "proyek besar" saya, tetapi saya tahu Make jika saya ingin menulis dengan cepat "lakukan saja" Makefile. Ini bagus untuk literasi budaya Anda, karena ada berton-ton pustaka perangkat lunak yang menggunakan Makefile, dan Anda pasti perlu mengedit kompiler dan lokasi pustaka tertentu. Tetapi Anda akan menemukan bahwa proyek-proyek besar (seperti KDE) bermigrasi ke CMake dan sejenisnya karena Make memang memiliki beberapa keterbatasan yang mendukung kepala mereka yang jelek ketika proyek menjadi rumit.
sumber
Saya bias karena saya pikir makefiles adalah sistem yang mengerikan. Anda harus mempelajari sintaksis umum sehingga Anda dapat memodifikasi makefile yang ada. Tetapi saya tidak berpikir mempelajari semuanya tentang hal itu atau membuat satu dari awal itu berguna.
sumber
Seperti banyak aspek dari keluaran IDE, makefile yang dibuat secara otomatis tipikal seringkali tidak terstruktur dengan efisien.
Dengan tingkat pemahaman yang sesuai, seringkali mungkin untuk meningkatkan kinerja secara signifikan (membangun lebih cepat dll). Namun, kecuali Anda benar-benar tahu apa yang sedang terjadi, Anda lebih cenderung ke FUBAR, ketika mengutak-atik file yang diedit secara otomatis.
Saya sangat merekomendasikan untuk dapat memahami apa yang sedang terjadi ... apakah Anda kemudian memilih untuk mulai mengedit yang sudah ada, atau membuat milik Anda sendiri, adalah masalah yang terpisah.
sumber
Mampu menggunakan dengan sukses
make
atau sesuatu seperti itu memungkinkan Anda mencentang kotak "memahami cara memodelkan dependensi antara bagian-bagian dari program yang terdiri dari lebih dari satu modul".sumber
Mempelajari cara menulis Makefiles adalah ide yang bagus karena sejumlah alasan.
sumber
Anda harus selalu mencoba memahami sistem bangun yang Anda gunakan.
Itu tidak berarti Anda harus dapat membuat semua file build dengan tangan. Bagian penting adalah memahami apa yang dilakukan sistem build untuk proyek Anda dan kemampuan umum untuk mengkompilasi proyek kecil secara manual (seperti dalam "mengetik perintah pada terminal").
Saya hanya cenderung berpikir bahwa membuat Makefile (sederhana) adalah langkah termudah untuk memahami apa yang sedang terjadi, tetapi Anda mungkin memiliki cara lain untuk memahami cara membangun sesuatu.
Mengapa / kapan harus belajar Makefiles
Jika Anda hanya menyimpan pemrograman untuk Windows dan tidak mengharapkan orang lain untuk mengkompilasi kode Anda, silakan kompilasi kode sesuka Anda.
Jika Anda ingin memprogram compiler agnostic (seperti pada "biarkan orang lain memutuskan kompiler atau IDE apa yang ingin mereka gunakan"), maka Anda harus mempelajari sistem build yang lain daripada hanya membiarkan IDE Anda "berurusan dengannya".
Jika Anda ingin memprogram untuk platform yang berbeda, maka Anda tentu perlu menggunakan sistem build yang tersebar luas.
Itu masih tidak berarti Anda harus tahu bagaimana Makefiles yang dibuat secara otomatis bekerja secara detail. Anda hanya perlu tahu bagaimana file input untuk sistem build berfungsi. Ini kebetulan memiliki sintaksis yang sama kadang-kadang.
Saya pribadi sangat suka Makefiles dan menggunakannya untuk banyak hal. Bukan hanya kompilasi kode. Saya membuat Makefile untuk setiap pdf yang lebih besar yang saya buat (dengan LaTeX) dan setiap proyek yang saya perlukan untuk mengotomatisasi beberapa tugas (membangun, mengemas, mengunggah, memperbarui dependensi dari repositori sumber, menarik / mendorong cadangan manual)
Namun, saya banyak bekerja di terminal dan saya bekerja dengan Linux. Saya tidak menggunakan apa yang Anda sebut IDE selain vim (editor teks yang kuat) dan alat konsol. Ini mungkin sangat berbeda untuk Anda.
Jika Anda pernah mengeluh karena harus menjalankan berbagai perintah yang muncul kembali hanya untuk "memperbarui" / mengemas / mengunggah / .. sebuah "proyek", maka mempelajari cara menulis Makefiles mungkin sesuatu yang bermanfaat bagi Anda.
Jika Anda memiliki dan menggunakan alat / GUI / IDE untuk semuanya, maka Anda mungkin tidak mendapatkan apa-apa dari pengetahuan itu.
sumber