Seberapa pentingkah untuk belajar makefile? [Tutup]

12

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?

dosaθ
sumber
1
sebagian besar proyek sumber terbuka banyak menggunakan makefile dalam satu atau lain cara. Jadi, ya, Anda harus belajar bagaimana makefiles bekerja. Menulisnya dengan tangan adalah cerita lain dan harus dihindari dalam preferensi untuk membuatnya dengan beberapa alat kecuali Anda memiliki sangat sedikit file atau dapat menggunakan aturan umum / implisit dan teknik serupa lainnya
permeakra
jika Anda ingin orang lain mengkompilasi sumber Anda di Linux dan sistem operasi berbasis Unix lainnya, Anda perlu mempelajarinya.
Anda dapat mempelajari dasar-dasar makefile, dependensi dan substitusi dll, dalam waktu yang lebih singkat yang akan membawa Anda untuk membaca semua jawaban untuk pertanyaan ini :)
JohnB

Jawaban:

14

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.

Maksud saya "layak belajar", haruskah saya meninggalkan semuanya dan belajar menulisnya sebelum melanjutkan belajar c ++?

Terus terang, itu adalah gagasan aneh "layak dipelajari" ...

Tapi tidak, saya pikir Anda tidak perlu melakukan itu.

Apakah mempelajarinya akan sangat diperlukan?

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.

Jika demikian, haruskah saya mempelajarinya (sintaksis umum dan memahami cara kerjanya dll.) Atau benar-benar belajar cara menulisnya?

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, autoconfdan 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 makeuntuk 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 daripada make.

Stephen C
sumber
8

Jika Anda bekerja dengan sistem operasi open source atau mirip Unix, ya. Meskipun hati, mereka tidak rumit. Belajar makeakan menghemat banyak waktu dalam jangka panjang.

EhevuTov
sumber
Belajar membaca atau belajar menulis?
Kedua. Anda ingin tahu cara membacanya sehingga Anda dapat men-debug masalah perangkat lunak yang Anda gunakan, atau menulis sehingga Anda dapat membuatnya sendiri.
EhevuTov
Maka saya harus tidak setuju dengan bagian penulisan. Ada banyak cara lain - yang bisa dibilang jauh lebih baik - untuk mengotomatisasi pembuatan. Menulis makefile yang berguna sebenarnya jauh dari sepele dan tidak perlu.
3

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.

Eric Brown
sumber
Mempelajari CMake akan menjadi perintah yang lebih besar manfaatnya. Makefile dapat dilihat sebagai detail implementasi - jangan repot-repot mempelajarinya (sampai benar-benar dipaksa), seperti file proyek Visual Studio.
2

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
Peduli untuk menjelaskan mengapa makefile adalah sistem yang mengerikan? Dibandingkan dengan apa?
JonnyJD
@ JonnyJD: Satu hal adalah saya tidak percaya sistem build yang baik harus Anda letakkan file make di setiap sub direktori. Tapi itu buruk karena tidak jauh lebih mudah digunakan kemudian menulis file bat yang benar-benar mengatakan sesuatu.
Terdengar lebih seperti Anda tidak suka membuat file build dengan tangan. Yang dengan sendirinya bukan masalah besar. Makefiles adalah varian yang seharusnya dapat dibaca dan ditulis secara manual. (termodulasi, hanya mencari pelacakan ketergantungan dibandingkan dengan bash / bat) Bagian otomatis adalah otomatis. Satu-satunya hal yang sebenarnya jauh berbeda adalah menentukan dependensi dalam GUI dan menyimpan semua ini dalam satu file proyek. Atau sistem pembangunan apa yang tidak begitu mengerikan?
JonnyJD
2

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.

Andrew
sumber
2

Mampu menggunakan dengan sukses makeatau sesuatu seperti itu memungkinkan Anda mencentang kotak "memahami cara memodelkan dependensi antara bagian-bagian dari program yang terdiri dari lebih dari satu modul".

Blrfl
sumber
1

Mempelajari cara menulis Makefiles adalah ide yang bagus karena sejumlah alasan.

  1. Make adalah bahasa yang memungkinkan Anda menyandikan dependensi antar komponen melalui aturan. Anda akan mendapatkan banyak pengalaman dengan menulis kode dengan cara ini, dan itu memperluas alat Anda untuk berpikir tentang memecahkan masalah pemrograman.
  2. Prinsip-prinsip yang Anda pelajari dengan Make dapat digunakan dengan Ant, Maven, dan Rake jika Anda memilih untuk belajar pemrograman di dunia Java atau Ruby.
  3. Banyak IDE memiliki file ajaib yang membawa informasi konfigurasi untuk membantu Anda membangun perangkat lunak Anda. Jika Anda tidak percaya kepada saya, cobalah menulis skrip untuk membangun perangkat lunak Anda tanpa IDE. Ketika Anda menulis Makefile Anda sendiri, Anda menjadi sangat sadar akan dependensi antara kode Anda, pustaka, dan variabel lingkungan Anda. Ketika sistem semakin besar, ini ternyata menjadi alat yang berguna untuk men-debug sistem Anda.
Jay Godse
sumber
0

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.

JonnyJD
sumber