Makefile'ları seviyorum
(switowski.com)-
Makefile'ları seviyorum. İlk kez kullanmamın üzerinden 10 yıldan fazla geçti. O zaman bile eski bir teknoloji gibi görünüyordu. Zaman geçtikçe yeni build araçları ortaya çıkıp kayboldu ama Makefile hâlâ kullanılmaya devam etti. Projelere katkı yaparken ona alıştım ve bir noktada sevmeye başladım. Şimdi yeni bir projeye başlarken ilk kullandığım otomasyon aracı bu.
-
Makefile'ları sevmemin nedeni, aynı komut setini uygulayan gayriresmî bir geleneği takip etmeleri. Yeni bir projeyle karşılaştığımda bir
Makefiledosyası varsamakeveyamake buildçalıştırırım, ardındanmake installçalıştırırım; proje derlenir ve yapılandırılır. Ya da ek adımlar hakkında bilgi edinirim. -
Kendi projelerimde de aynı geleneği uygulamaya çalışıyorum. Eski bir proje klasörünü açıp
make devçalıştırdığımda, proje derlenip geliştirme sunucusu ayağa kalksın diye gereken tüm adımları yerine getiriyor. Farklı teknolojiler kullandığım için her birinin farklı komutları vardı. Makefile kullanınca, aylarca hatta yıllarca dokunmadığım projeleri bile kolayca yönetebiliyorum. -
Makefile basit. Koşullar, bayraklar veya başka karmaşık özellikler kullanmıyorum. Çoğu görev bir ya da daha fazla shell komutundan oluşuyor. Birkaç fonksiyona sahip bir bash betiği de yazabilirim ama Makefile yazmak daha kolay ve daha hızlı.
-
Kişisel projelerimin çoğunda şu genel görevler bulunuyor:
dev: geliştirme sunucusunu başlatbuild: projeyi derle (eğer build adımı gerekiyorsa)deploy: projeyi dağıt / yayımla
-
Bu blogda tek hedefli basit bir Makefile var:
dev: npm run dev -
Daha karmaşık projelerde ise şöyle Makefile'lar kullanıyorum:
# Geliştirme sunucusunu çalıştır dev: bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload # Varlıkları derle build: npm run gulp build # Belirli klasörleri izle ve varlıkları işle watch: npm run gulp watch -- --wip # Web sitesini yerelde derle, şifrele ve Netlify sunucusuna dağıt deploy: JEKYLL_ENV=production bundle exec jekyll build; \ make encrypt; \ netlify deploy --prod # "_site" klasörünü şifrele encrypt: npx staticrypt _site/*.html -r -d _site -
Yukarıdaki örnekte phony hedeflerin varlığını göz ardı ediyorum. Eğer
dev,build,watch,deployveyaencryptadlı bir dosya varsa Makefile beklediğim gibi çalışmayabilir. -
GNU Make çok yaygın. Linux'ta büyük olasılıkla zaten kurulu geliyor. MacBook'umda da onu özellikle kurduğumu hatırlamıyorum. Muhtemelen başka araçlarla birlikte kurulmuştu. Make basit ve diğer build araçlarına kıyasla daha az ek bağımlılığa sahip. Bu da onu kısıtlı ortamlarda kullanışlı kılabiliyor. Make'in zaten mevcut olma ihtimali yüksek. Değilse de Makefile içindeki komutları shell'de elle çalıştırabilirsiniz.
-
Başka build araçlarına karşı değilim. Yeni bir build aracı keşfettiğimde ilgimi çekiyor. Ama yine de farklı araçları yönetmek için Make kullanmaya devam ediyorum.
GN⁺ Özeti
- Makefile, farklı projelerde tutarlı bir komut seti sunarak yönetimi kolaylaştırır.
- Basit sözdizimi ve az sayıda bağımlılığı sayesinde kısıtlı ortamlarda da faydalı olabilir.
- Farklı build araçlarıyla birlikte kullanılabildiği için esnekliği yüksektir.
- Benzer işlevlere sahip araçlar arasında
CMake,Ninja,Gradlebulunur.
2 yorum
Bağımlılıkları tanımlamayan
makefile, daha iyi bir kullanım deneyimi içinjustfileile değiştirilebilir.Hacker News yorumu
Make kullanımına teşvik
Makefile’ların sorunları
Make’in avantajları
PHONY hedef kullanımı
mtimetabanlı bağımlılık takibi kullanılmazPHONYolarak tanımlanması gerekirjustvejustfile’lara geçilerek daha basit kullanım tercih ediliyorMake üzerine hararetli tartışma
Make’in çeşitli kullanım alanları
Make’in sınırları ve alternatifler
configurebetiklerine ihtiyaç duyduğumtimekullandığı, ancak bunun sorun çıkarabildiğiJustfile’lara geçiş
Makefile’ın basit kullanımı