Makefiles सीखना कितना महत्वपूर्ण है? [बन्द है]


12

मैं c ++ में ज्यादातर एक शौक के रूप में काम करता हूं (मैं अभी भी स्कूल में हूं और उसके बाद वास्तविक नौकरी नहीं है)। आईडीई मेरे लिए मेकफाइल उत्पन्न करता है और इसलिए मैं सोच रहा हूं कि यह सीखने लायक है कि उन्हें खुद कैसे बनाया जाए। "लायक सीखने" से मेरा मतलब है, क्या मुझे सब कुछ छोड़ देना चाहिए और सीखना जारी रखना चाहिए कि c ++ सीखना जारी रखने से पहले उन्हें कैसे लिखना चाहिए? क्या उन्हें सीखना वास्तव में आवश्यक है? यदि हां, तो क्या मुझे उनके बारे में सीखना चाहिए (सामान्य वाक्य रचना और यह समझना कि वे कैसे काम करते हैं आदि) या वास्तव में उन्हें लिखना सीखें?


1
अधिकांश ओपन-सोर्स प्रोजेक्ट्स मेकफाइल्स का एक या दूसरे तरीके से भारी उपयोग करते हैं। तो, हाँ, आपको सीखना चाहिए कि मेकफाइल्स कैसे काम करते हैं। उन्हें हाथों से लिखना एक और कहानी है और उन्हें किसी उपकरण द्वारा उत्पन्न करने में वरीयता से बचा जाना चाहिए, जबकि आपके पास बहुत कम फाइलें हैं या जेनेरिक / निहित नियमों और अन्य समान तकनीकों का उपयोग कर सकते हैं
9

यदि आप लिनक्स और अन्य यूनिक्स-आधारित ऑपरेटिंग सिस्टम पर अपने स्रोत को संकलित करना चाहते हैं, तो आपको उन्हें सीखने की आवश्यकता है।

आप कम समय में मेकफाइल्स, निर्भरता और प्रतिस्थापन आदि की मूल बातें जान सकते हैं, जो आपको इस प्रश्न के सभी उत्तरों को पढ़ने के लिए ले जाएगा :)
JohnB

जवाबों:


14

हां, यह समझने लायक है कि मेकफाइल्स कैसे काम करता है। यह अभी आपके लिए प्रासंगिक नहीं हो सकता है (क्योंकि आप एक आईडीई का उपयोग कर रहे हैं जो उन्हें उत्पन्न करता है), लेकिन संभावना है कि ज्ञान भविष्य में उपयोगी होगा।

"लायक सीखने" से मेरा मतलब है, क्या मुझे सब कुछ छोड़ देना चाहिए और सीखना जारी रखना चाहिए कि c ++ सीखना जारी रखने से पहले उन्हें कैसे लिखना चाहिए?

सच कहूँ तो, यह "सीखने लायक" विचित्र धारणा है ...

लेकिन नहीं मुझे नहीं लगता कि आपको ऐसा करने की आवश्यकता है।

क्या उन्हें सीखना वास्तव में आवश्यक है?

हम यह अनुमान नहीं लगा सकते हैं कि क्या आपको भविष्य में इस ज्ञान की आवश्यकता है। यह इस बात पर निर्भर करता है कि आप C ++ प्रोग्रामिंग के साथ जारी रखते हैं या आप इसे किस संदर्भ में करते हैं।

यदि हां, तो क्या मुझे उनके बारे में सीखना चाहिए (सामान्य वाक्य रचना और यह समझना कि वे कैसे काम करते हैं आदि) या वास्तव में उन्हें लिखना सीखें?

मैं दोनों को सलाह दूंगा। यदि आप मेकफाइल नहीं लिख सकते हैं, तो यह बहस योग्य है कि आप जानते हैं कि क्या चल रहा है।

दूसरा दृष्टिकोण है जो कहता है कि बहुत अधिक ज्ञान सहायक नहीं है।

यदि आप इसमें गहराई से जाते हैं, तो आप सीखेंगे कि मेक के कई अलग-अलग संस्करण हैं, और यह एक जटिल मेकफाइल लिखना है जो मेक के कई संस्करणों के साथ कई संस्करणों के साथ काम करता है ... कठिन है। हालांकि, खुले स्रोत की दुनिया में, यह उपकरण का उपयोग करने के लिए "सबसे अच्छा अभ्यास" है automake, autoconfऔर जैसे मेकफाइल्स उत्पन्न करने के लिए, आदि। यदि आप ऐसा करते हैं, तो बहुत सारे संस्करण / मंच से संबंधित जटिलता को पर्दे के पीछे से निपटाया जाता है। ।


अंत में, आपने प्रश्न "जावा" के साथ टैग किया। मेरा लेना यह है कि आपको makeजावा अनुप्रयोगों के निर्माण के लिए उपयोग नहीं करना चाहिए (जब तक कि आप मूल कोड पुस्तकालयों का निर्माण नहीं कर रहे हैं)। जावा विशिष्ट बिल्ड टूल हैं जो उपयोग करने में बहुत आसान हैं ... और से बेहतर काम करते हैं make


8

यदि आप ओपन सोर्स या यूनिक्स जैसे ऑपरेटिंग सिस्टम के साथ काम कर रहे हैं, तो हाँ। हालांकि दिल ले लो, वे उस जटिल नहीं हैं। सीखना makeआपको लंबे समय में बहुत समय बचाएगा।


पढ़ने के लिए सीखना या लेखन के लिए सीखना?

दोनों। आप जानना चाहते हैं कि आप इसे कैसे पढ़ सकते हैं ताकि आप उपयोग किए जाने वाले सॉफ़्टवेयर के मुद्दों को डीबग कर सकें, या लिख ​​सकें ताकि आप अपना स्वयं का बना सकें।
एवुवोतोव

तब मुझे लेखन भाग से असहमत होना पड़ा। अन्य बहुत सारे हैं - यकीनन बहुत बेहतर - स्वचालित बनाने के तरीके। वास्तव में उपयोगी मेकफाइल्स लिखना तुच्छ से दूर है और आवश्यक नहीं है।

3

Makefiles UNIX सिस्टम (जैसे AIX, Linux, OS X) पर महत्वपूर्ण हैं। हालांकि, मुझे लगता है कि हाल के वर्षों में उनका निरपेक्ष "आपको पता चल जाएगा" का महत्व कम हो गया है। उदाहरण के लिए, आप वास्तव में उन्हें विंडोज डेवलपमेंट (विजुअल स्टूडियो, आदि) और एक्सकोड (ओएस एक्स पर) पूरी तरह से एक अलग प्रणाली का उपयोग नहीं करते हैं। मैं जावा में ज्यादा नहीं हूं, लेकिन मुझे लगता है कि वे चींटी फाइलों और व्हाट्सएप का इस्तेमाल करते हैं।

एक बहुत ही शांत प्रणाली है जिसे CMake कहा जाता है जो उस ऑपरेटिंग सिस्टम के लिए देशी बिल्ड फ़ाइलों को उत्पन्न करता है जिसे आप चालू करते हैं। उदाहरण के लिए, यदि आप CMake में अपना प्रोजेक्ट विनिर्देश लिखते हैं, तो आप विंडोज पर एक विजुअल स्टूडियो बिल्ड प्रोजेक्ट, मैक पर एक XCode प्रोजेक्ट और लिनक्स पर एक मेकफाइल बना सकते हैं। एक तरह से, सीमेक ऑटोकॉन्फ़ और ऑटोमेक की जगह लेता है।

मैं आमतौर पर अपने "बड़े प्रोजेक्ट्स" के लिए सीएमके फाइलें बनाता हूं, लेकिन मुझे पता है कि मेक इन केस मैं एक त्वरित लिखना चाहता हूं "बस इसे" मेकाइल "कर दें। यह आपकी सांस्कृतिक साक्षरता के लिए अच्छा है, क्योंकि मेकफाइल्स का उपयोग करने वाले सॉफ्टवेयर लाइब्रेरी के टन और टन हैं, और आपको अनिवार्य रूप से विशिष्ट संकलक और पुस्तकालय स्थानों को संपादित करने की आवश्यकता होगी। लेकिन आप पाएंगे कि बड़ी परियोजनाएं (जैसे केडीई) सीएमके की ओर पलायन कर रही हैं और जैसे मेक में कुछ सीमाएँ हैं जो परियोजनाओं के जटिल होने पर उनके बदसूरत सिर को पीछे कर देती हैं।


CMake सीखना परिमाण के आदेश अधिक लाभदायक होंगे। Makefiles को कार्यान्वयन विवरण के रूप में देखा जा सकता है - उन्हें (जब तक कि वास्तव में मजबूर नहीं किया जाता है) सीखने की जहमत न उठाएं, ठीक Visual Studio प्रोजेक्ट फाइलों की तरह।

2

मुझे पूर्वाग्रह है क्योंकि मुझे लगता है कि मेकअप एक भयानक प्रणाली है। आपको सामान्य सिंटैक्स सीखना चाहिए ताकि आप मौजूदा मेकफाइल को संशोधित कर सकें। लेकिन मुझे नहीं लगता कि इसके बारे में सब कुछ सीखना और न ही खरोंच से एक बनाना उपयोगी है।


यह समझाने के लिए कि मेकअप एक भयानक प्रणाली क्यों है? क्या तुलना?
जॉनीजैड

@JonnyJD: एक बात यह है कि मुझे विश्वास नहीं है कि एक अच्छी बिल्ड सिस्टम में आपको प्रत्येक उप-निर्देशिका में एक फ़ाइल डालनी चाहिए। लेकिन इसका बुरा क्योंकि इसका उपयोग करने के लिए बहुत आसान नहीं है तो एक बैट फाइल लिखना जो वास्तव में कुछ कह रहा है।

लगता है जैसे आप हाथ से निर्माण फ़ाइलों को बनाने की तरह नहीं है। जो अपने आप में कोई बड़ी बात नहीं है। मेकफाइल्स एक ऐसा संस्करण है जिसे मैन्युअल रूप से पढ़ना और लिखना संभव होना चाहिए। (modularized, केवल बैश / बल्ले की तुलना में निर्भरता ट्रैकिंग को बंद कर दिया) स्वचालित भाग स्वचालित है। केवल एक चीज जो वास्तव में बहुत अलग है वह एक जीयूआई में निर्भरता को निर्दिष्ट कर रही है और एक परियोजना फ़ाइल में इस सब को बचा रही है। या क्या निर्माण प्रणाली है कि बहुत कम भयानक है?
जॉनीजैड

2

आईडीई आउटपुट के कई पहलुओं के साथ, एक सामान्य ऑटो-जेनरेटेड मेकफाइल अक्सर अक्षम रूप से संरचित होता है।

उचित स्तर की समझ के साथ, प्रदर्शन में सुधार (तेज बिल्ड आदि) में सुधार करना अक्सर संभव होता है। हालाँकि, जब तक आप वास्तव में नहीं जानते कि क्या हो रहा है, तब आपको फ़्यूबर की अधिक संभावना है, जब एक ऑटोजेन-एड फ़ाइल के साथ फ़िडलिंग।

मैं अत्यधिक यह समझने में सक्षम हूं कि क्या चल रहा है ... क्या आप बाद में किसी मौजूदा को संपादित करना शुरू कर सकते हैं या अपना खुद का निर्माण करना चाहते हैं, यह एक अलग मुद्दा है।


2

सफलतापूर्वक उपयोग करने makeया कुछ ऐसा करने में सक्षम होने के नाते यह आपको "एक मॉड्यूल से अधिक मॉड्यूल से बने कार्यक्रम के भागों के बीच निर्भरता को कैसे मॉडल करता है" यह समझने की सुविधा देता है।


1

Makefiles लिखना सीखना कई कारणों से एक अच्छा विचार है।

  1. बनाओ एक ऐसी भाषा है जो आपको नियमों के माध्यम से घटकों के बीच निर्भरता को सांकेतिक शब्दों में बदलने देती है। आपको इस तरह कोड लिखने के साथ बहुत अनुभव मिलेगा, और यह प्रोग्रामिंग समस्याओं को हल करने के बारे में सोचने के लिए आपके टूल को व्यापक बनाता है।
  2. यदि आप मेक के साथ सीखते हैं, तो आप एंट, मावेन और रेक के साथ उपयोग कर सकते हैं यदि आप जावा या रूबी दुनिया में प्रोग्रामिंग सीखना चुनते हैं।
  3. कई आईडीई में जादू की फाइलें होती हैं जो आपके सॉफ़्टवेयर को बनाने में आपकी मदद करने के लिए कॉन्फ़िगरेशन जानकारी लेती हैं। यदि आप मुझ पर विश्वास नहीं करते हैं, तो आईडीई के बिना अपने सॉफ़्टवेयर के निर्माण के लिए एक स्क्रिप्ट लिखने का प्रयास करें। जब आप अपने खुद के मेकफाइल्स लिखते हैं, तो आप अपने कोड, पुस्तकालयों और अपने पर्यावरण चर के बीच निर्भरता के बारे में बहुत जागरूक हो जाते हैं। जैसे-जैसे सिस्टम बड़ा होता जाता है, यह आपके सिस्टम को डीबग करने का एक उपयोगी उपकरण बन जाता है।

0

आपको हमेशा उस निर्माण प्रणाली को समझने की कोशिश करनी चाहिए जिसका आप उपयोग कर रहे हैं।

यह जरूरी नहीं है कि आपको हाथ से सभी बिल्ड फाइलें बनाने में सक्षम होना चाहिए। महत्वपूर्ण हिस्सा यह समझ रहा है कि आपकी परियोजना के लिए निर्माण प्रणाली क्या कर रही है और छोटी परियोजनाओं को मैन्युअल रूप से संकलित करने की सामान्य क्षमता (जैसा कि "टर्मिनल पर टाइपिंग कमांड")।

मैं सिर्फ यह सोचता हूं कि बनाने (सरल) मेकफाइल्स यह समझने के लिए सबसे आसान कदम है कि क्या हो रहा है, लेकिन आपके पास चीजों को बनाने के तरीके को समझने के अन्य साधन हो सकते हैं।

Makefiles क्यों / कब सीखें

यदि आप केवल विंडोज के लिए प्रोग्रामिंग रखते हैं और किसी और से अपेक्षा नहीं करते हैं कि वह आपके कोड को संकलित करे, तो बेझिझक कोड को आप कैसे पसंद करते हैं।

यदि आप कंपाइलर एग्नॉस्टिक को प्रोग्राम करना चाहते हैं (जैसा कि "दूसरों को यह तय करने दें कि वे किस कंपाइलर या आईडीई का उपयोग करना चाहते हैं"), तो आपको अपने आईडीई को "इससे निपटने" की तुलना में एक और बिल्ड सिस्टम सीखना चाहिए।

यदि आप विभिन्न प्लेटफार्मों के लिए प्रोग्राम करना चाहते हैं, तो आपको निश्चित रूप से एक व्यापक बिल्ड सिस्टम का उपयोग करने की आवश्यकता है।

इसका मतलब यह नहीं है कि आपको यह जानना होगा कि ऑटोजेनरेटेड मेकफाइल्स कैसे काम करते हैं। आपको बस यह जानना होगा कि बिल्ड सिस्टम के लिए इनपुट फाइलें कैसे काम करती हैं। ये कभी-कभी एक समान सिंटैक्स होते हैं।


मुझे व्यक्तिगत रूप से मेकफाइल्स पसंद हैं और कई चीजों के लिए उनका उपयोग करते हैं। केवल संकलन कोड नहीं। मैं हर बड़े पीडीएफ के लिए एक मेकफाइल बनाता हूं जो मैं (लाटेक्स के साथ) बनाता हूं और हर प्रोजेक्ट के लिए मुझे कुछ कार्यों को स्वचालित करने की जरूरत है (भवन, पैकेजिंग, अपलोडिंग, स्रोत रिपॉजिटरी से निर्भरता अपडेट करना, मैनुअल बैकअप को खींचना / धक्का देना)

हालांकि, मैं टर्मिनल पर बहुत काम कर रहा हूं और मैं लिनक्स के साथ काम कर रहा हूं। मैं इसका उपयोग नहीं करता हूं जिसे आप vim (शक्तिशाली पाठ संपादक) और कंसोल टूल के अलावा अन्य आईडीई कहेंगे। यह आपके लिए बहुत भिन्न हो सकता है।

यदि आपने कभी भी "अपडेट" / पैकेज / अपलोड / / a "प्रोजेक्ट" के लिए अलग-अलग रीसॉर्स्ड कमांड चलाने के बारे में शिकायत की है, तो Makefiles लिखना सीखना आपके लिए कुछ सहायक हो सकता है।

यदि आपके पास हर चीज के लिए उपकरण / GUIs / IDEs हैं और उपयोग करते हैं, तो आपको उस ज्ञान से बाहर कुछ भी नहीं मिल सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.