मुझे Makefile पसंद है
(switowski.com)-
मुझे Makefile पसंद है। इसे पहली बार इस्तेमाल किए 10 साल से भी ज़्यादा हो चुके हैं। उस समय भी यह पुरानी तकनीक जैसा लगता था। समय के साथ नए build tools आए और गायब भी हो गए, लेकिन Makefile अब भी इस्तेमाल हो रहा था। अलग-अलग projects में काम करते हुए मैं इसका आदी हो गया, और किसी बिंदु पर मुझे यह सचमुच पसंद आने लगा। अब जब भी मैं कोई नया project शुरू करता हूँ, यह पहला automation tool होता है जिसका मैं इस्तेमाल करता हूँ।
-
मुझे Makefile इसलिए पसंद है क्योंकि यह एक तरह की अनौपचारिक परंपरा का पालन करता है, जिसमें एक जैसे command sets लागू होते हैं। जब मैं किसी नए project में
Makefileफ़ाइल देखता हूँ, तोmakeयाmake buildचलाता हूँ, फिरmake installचलाता हूँ, और project build होकर configure हो जाता है। या कम-से-कम मुझे आगे के अतिरिक्त steps के बारे में जानकारी मिल जाती है। -
मैं अपने projects में भी यही convention लागू करने की कोशिश करता हूँ। अगर मैं किसी पुराने project folder को खोलकर
make devचलाऊँ, तो वह project को build करने और development server चलाने के लिए ज़रूरी सारे steps पूरा कर देता है। मैंने कई तरह की technologies इस्तेमाल की हैं, और हर technology के commands अलग थे। Makefile की वजह से मैं उन projects को भी आसानी से संभाल पाता हूँ जिन्हें महीनों या सालों तक छुआ नहीं गया हो। -
Makefile सरल है। मैं conditionals, flags या दूसरी complex features का इस्तेमाल नहीं करता। ज़्यादातर काम एक या उससे ज़्यादा shell commands से बन जाते हैं। कुछ functions के साथ bash script भी लिखी जा सकती है, लेकिन Makefile लिखना ज़्यादा आसान और तेज़ है।
-
मेरे ज़्यादातर personal projects में आम तौर पर ये tasks होते हैं:
dev: development server शुरू करनाbuild: project build करना (अगर build step की ज़रूरत हो)deploy: project deploy/publish करना
-
इस blog में एक बहुत ही simple Makefile है, जिसमें सिर्फ एक target है:
dev: npm run dev -
ज़्यादा complex projects में मैं इस तरह का Makefile इस्तेमाल करता हूँ:
# 개발 서버 실행 dev: bundle exec jekyll serve --unpublished -w --config _config.yml,_config-dev.yml --livereload # 자산 빌드 build: npm run gulp build # 특정 폴더 감시 및 자산 처리 watch: npm run gulp watch -- --wip # 로컬에서 웹사이트 빌드, 암호화 및 Netlify 서버에 배포 deploy: JEKYLL_ENV=production bundle exec jekyll build; \ make encrypt; \ netlify deploy --prod # "_site" 폴더 암호화 encrypt: npx staticrypt _site/*.html -r -d _site -
ऊपर के example में phony targets के होने की बात को नज़रअंदाज़ किया गया है। अगर
dev,build,watch,deployयाencryptनाम की कोई file मौजूद हो, तो Makefile उम्मीद के मुताबिक काम नहीं कर सकता। -
GNU Make बहुत व्यापक रूप से उपलब्ध है। Linux पर इसके पहले से installed होने की पूरी संभावना है। MacBook पर भी मुझे याद नहीं कि मैंने इसे अलग से install किया हो। शायद यह किसी दूसरे tool के साथ आया होगा। Make सरल है और दूसरे build tools की तुलना में इसकी अतिरिक्त dependencies कम हैं। यह सीमित environments में काम आ सकता है। बहुत संभव है कि Make पहले से मौजूद हो। और अगर न भी हो, तो Makefile के commands shell में manually चलाए जा सकते हैं।
-
मैं दूसरे build tools के खिलाफ नहीं हूँ। जब भी कोई नया build tool दिखता है, मुझे दिलचस्प लगता है। लेकिन फिर भी मैं अलग-अलग tools को manage करने के लिए Make का इस्तेमाल करता हूँ।
GN⁺ का सार
- Makefile अलग-अलग projects में एक consistent command set देता है, जिससे management आसान हो जाती है।
- इसकी simple syntax और कम dependencies की वजह से यह सीमित environments में भी उपयोगी हो सकता है।
- इसे कई build tools के साथ इस्तेमाल किया जा सकता है, इसलिए इसकी flexibility अच्छी है।
- समान तरह के tools में
CMake,Ninja,Gradleआदि शामिल हैं।
2 टिप्पणियां
यदि
makefileमें dependencies परिभाषित नहीं हैं, तो उसेjustfileसे बदलने पर बेहतर usability मिलती है.Hacker News राय
Make के उपयोग के लिए प्रोत्साहन
Makefiles की समस्याएँ
Make के फायदे
PHONY target का उपयोग
Make पर तीखी बहस
Make के विविध उपयोग
Make की सीमाएँ और विकल्प
Justfiles पर स्विच
Makefile का सरल उपयोग