Saya suka Makefile
(switowski.com)-
Saya suka Makefile. Sudah lebih dari 10 tahun sejak pertama kali menggunakannya. Bahkan saat itu pun teknologi ini terlihat seperti teknologi lama. Seiring waktu, alat build baru bermunculan lalu menghilang, tetapi Makefile tetap digunakan. Saya jadi terbiasa dengannya saat ikut mengerjakan berbagai proyek, dan pada suatu titik saya pun menyukainya. Sekarang, ini adalah alat otomasi pertama yang saya gunakan saat memulai proyek baru.
-
Alasan saya menyukai Makefile adalah karena ia mengikuti konvensi tidak resmi untuk menerapkan kumpulan perintah yang sama. Saat saya menemukan proyek baru dan ada file
Makefile, saya akan menjalankanmakeataumake build, lalumake install, dan proyeknya akan dibangun serta dikonfigurasi. Atau setidaknya saya bisa mengetahui langkah tambahan yang diperlukan. -
Saya juga berusaha menerapkan konvensi yang sama di proyek saya sendiri. Jika saya membuka folder proyek lama lalu menjalankan
make dev, semua langkah yang diperlukan akan dijalankan untuk membangun proyek dan menyalakan server pengembangan. Karena saya telah memakai beragam teknologi, masing-masing punya perintah yang berbeda. Dengan Makefile, proyek yang tidak disentuh selama berbulan-bulan atau bahkan bertahun-tahun pun tetap mudah dikelola. -
Makefile itu sederhana. Saya tidak menggunakan kondisional, flag, atau fitur rumit lainnya. Sebagian besar tugas hanya terdiri dari satu atau lebih perintah shell. Saya bisa saja menulis skrip bash dengan beberapa fungsi, tetapi Makefile lebih mudah dan cepat ditulis.
-
Sebagian besar proyek pribadi saya memiliki tugas umum seperti berikut:
dev: memulai server pengembanganbuild: membangun proyek (jika memerlukan langkah build)deploy: menerapkan/mempublikasikan proyek
-
Blog ini memiliki Makefile sederhana dengan satu target:
dev: npm run dev -
Pada proyek yang lebih kompleks, saya menggunakan Makefile seperti ini:
# Jalankan server pengembangan dev: bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload # Build aset build: npm run gulp build # Pantau folder tertentu dan proses aset watch: npm run gulp watch -- --wip # Build situs web secara lokal, enkripsi, lalu deploy ke server Netlify deploy: JEKYLL_ENV=production bundle exec jekyll build; \ make encrypt; \ netlify deploy --prod # Enkripsi folder "_site" encrypt: npx staticrypt _site/*.html -r -d _site -
Dalam contoh di atas, keberadaan target phony diabaikan. Jika ada file bernama
dev,build,watch,deploy, atauencrypt, Makefile mungkin tidak akan bekerja seperti yang diharapkan. -
GNU Make sangat umum digunakan. Di Linux, kemungkinan besar sudah terpasang. Di MacBook juga saya tidak ingat pernah memasangnya secara eksplisit. Mungkin terpasang bersama alat lain. Make itu sederhana dan memiliki lebih sedikit dependensi tambahan dibanding alat build lain. Ini bisa berguna di lingkungan yang terbatas. Kemungkinan besar Make sudah tersedia. Kalau tidak, perintah di dalam Makefile tetap bisa dijalankan secara manual di shell.
-
Saya tidak menentang alat build lain. Saat menemukan alat build baru, saya merasa tertarik. Tetapi saya tetap memakai Make untuk mengelola berbagai alat tersebut.
Ringkasan GN⁺
- Makefile menyediakan kumpulan perintah yang konsisten di berbagai proyek sehingga lebih mudah dikelola.
- Dengan sintaks yang sederhana dan dependensi yang sedikit, Makefile tetap berguna bahkan di lingkungan yang terbatas.
- Karena dapat digunakan bersama berbagai alat build, fleksibilitasnya tinggi.
- Alat dengan fungsi serupa antara lain
CMake,Ninja, danGradle.
2 komentar
Untuk
makefileyang tidak mendefinisikan dependensi, menggantinya denganjustfilememberikan kegunaan yang lebih baik.Komentar Hacker News
Dorongan untuk menggunakan Make
Masalah pada Makefile
Kelebihan Make
Penggunaan target PHONY
mtimejustdanjustfileagar penggunaan lebih sederhanaPerdebatan sengit tentang Make
Beragam pemanfaatan Make
Batasan Make dan alternatifnya
configuremtimeuntuk memeriksa apakah input masih terbaru, tetapi ini bisa menimbulkan masalahBeralih ke Justfile
Penggunaan Makefile yang sederhana