क्या सीधे तौर पर अप्रचलित माना जाता है? [बन्द है]


31

इसलिए मैं सीधे मेकफाइल्स बनाने के संबंध में कई टिप्पणियां / पोस्ट / इत्यादि लेकर आया हूं और 2015 में यह कैसे करना एक मूर्खतापूर्ण बात है। मैं सीएमके जैसे टूल से अवगत हूं, और मैं वास्तव में सीएमके का उपयोग अक्सर करता हूं। बात यह है कि, CMake सिर्फ आपके लिए Makefile बना रहा है और इसे स्वयं करने के tedium को निकालने में मदद कर रहा है। बेशक यह कई अन्य महान सुविधाओं को जोड़ता है ... लेकिन अंत में अभी भी एक मेकफिल है।

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

यदि मेक को पुराना माना जाता है, तो एक C / C ++ देव को छोटी, व्यक्तिगत परियोजनाओं के निर्माण के लिए क्या करना चाहिए?


8
makeबिना मेकफाइल के छोटी, व्यक्तिगत परियोजनाएँ पर्याप्त हैं। क्या परेशानी है?
ott--

8
मेरे FreeBSD सिस्टम पर उपलब्ध सॉफ्टवेयर के हर टुकड़े, दोनों डेस्कटॉप और सर्वर, एक मेकफाइल है जो 'मेक' द्वारा शुरू किया गया है। नंबर 'मेक' अप्रचलित नहीं है।
रॉब

3
लोग IDEs का उपयोग करने के लिए स्वतंत्र हैं, लेकिन अगर उनका IDE लगभग 40 साल makeपहले Makefiles का उपयोग करके परियोजनाओं का समर्थन नहीं कर सकता है, जो पहले लिखा गया था, तो उन्हें उम्मीद नहीं करनी चाहिए कि लोग उसके आसपास काम करेंगे।
मील्स राउत

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

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

जवाबों:


30

बड़ा अंतर यह है कि CMake एक क्रॉस-प्लेटफॉर्म मेटा-बिल्ड सिस्टम है। एक सिंगल सीमेक प्रोजेक्ट सामान्य यूनिक्स / लिनक्स मेकफाइल, विंडोज के लिए एक विजुअल स्टूडियो प्रोजेक्ट, मैक के लिए एक एक्सकोड प्रोजेक्ट और लगभग किसी भी अन्य गैर-मेटा बिल्ड सिस्टम का उपयोग कर सकता है जिसका आप उपयोग या समर्थन करना चाहते हैं।

मैं सीधे तौर पर या यहां तक ​​कि मैन्युअल रूप से एडिटिंग मेकफाइल्स बनाने का उपयोग नहीं करूंगा, "अप्रचलित" है, लेकिन वे चीजें हैं जो आपको शायद तब तक नहीं करनी चाहिए जब तक आप यूनिक्स / लिनक्स सामान पर काम नहीं कर रहे हैं जिन्हें विंडोज के लिए पोर्टिंग की आवश्यकता नहीं है, जैसे कि आप कैसे दृश्य स्टूडियो प्रोजेक्ट फ़ाइलों को सीधे संपादित नहीं किया जाना चाहिए, यदि आप कभी भी उन्हें विंडोज पर पोर्ट नहीं करना चाहते हैं। यदि आपको पोर्टेबिलिटी में कोई दिलचस्पी है, तो यह एक निर्माण-प्रणाली को सीखने के लायक है, जैसे स्कैन या सीएमके।


9
POSIX makeभी क्रॉस-प्लेटफॉर्म है।
ब्लरफ्ल

6
@ गलत यह सच हो सकता है, लेकिन आम तौर पर आपको अपनी परियोजना को संकलित करने और / या लिंक करने के लिए उपयोग की जाने वाली कमांड लाइनें मिलेंगी, जो आपके द्वारा लक्षित किए जा रहे सभी प्लेटफ़ॉर्म विशिष्ट हैं, भले ही आप जो भी लक्ष्य कर रहे हैं वह POSIX- अनुरूप हो और भले ही आप सभी पर एक ही संकलक का उपयोग कर रहे हैं (वहाँ अभी भी शामिल फ़ाइलों के स्थानों के साथ pesky समस्याओं हो जाएगा, आप की जरूरत है -lm, -lnslऔर इतने पर या उन सुविधाओं सी पुस्तकालय में शामिल हैं, आदि)।
जूल्स

5
@ जूल्स बहुत अधिक (या कम) है CMake, यह मूल रूप से आपके मानक के निर्माण की दिशा में अनुरूप है, जो एलएलएफ लोडर वाले सिस्टम के लिए मॉड्यूलर अनुप्रयोग है, और उस विशिष्ट उपकरण श्रृंखला के लिए आवश्यक सभी उपकरणों के लिए सार प्रदान करता है। यदि आप उस टूलचैन (जैसे नंगे धातु के लिए कस्टम लिंकर स्क्रिप्ट) से प्रस्थान करते हैं, तो CMakeअचानक कोई समर्थन या पोर्टेबिलिटी प्रदान नहीं करता है, आप इसे हैकिंग उसी तरह समाप्त करते हैं जैसे आप पूरी तरह से कस्टम बिल्ड स्क्रिप्ट को हैक करने के लिए करते थे।
Ext3h

वही क्यू मेक के लिए जाता है (बुरी तरह से असंगत रूप से असंगत व्यवहार करने के बावजूद ** एपी सीएमके है), btw;)
mlvjjr

11

क्या makeवास्तव में पुराना है?

मुझे ऐसा नहीं लगता। अंत में, मेक अभी भी काफी शक्तिशाली है जो वांछित सभी कार्यक्षमता प्रदान करता है, जैसे परिवर्तित स्रोत और समान रूप से सशर्त संकलन। कहना makeपुराना था, यह कहना वैसा ही होगा जैसा कि कस्टम लिंकर स्क्रिप्ट लिखना पुराना था।

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

दूसरी ओर, CMakeजेनेरिक ईएलएफ पुस्तकालयों और निष्पादनों को सृजित करने की दिशा में प्रत्यक्ष रूप से अनुकूल है। जब भी आप उन्हें पूर्वनिर्धारित प्रक्रियाओं से विदा करते हैं, तो आपको हैकिंग शुरू करनी होगी, CMakeजैसा कि आप अपने खुद के मेकफाइल्स को हैक करने के लिए करते थे।

यह देखते हुए कि आप एक सिस्टम के लिए केवल औसत एप्लिकेशन की तुलना में C ++ में कहीं अधिक बना सकते हैं जो ELF लोडर जानता है, CMakeनिश्चित रूप से सभी परिदृश्यों के अनुकूल नहीं है। हालाँकि यदि आप इस तरह के मानकीकृत वातावरण में काम कर रहे हैं, CMakeया इनमें से कोई भी आधुनिक स्क्रिप्ट जनरेटर फ्रेमवर्क निश्चित रूप से आपके सबसे अच्छे दोस्त हैं।

यह हमेशा इस बात पर निर्भर करता है कि आपका आवेदन कितना विशिष्ट है, और CMakeफ्रेमवर्क की संरचना आपके काम के प्रवाह को कितनी अच्छी तरह फिट करती है।


उपयोगी होते हुए, मेक ब्रेडीड, आर्कन सिंटैक्स और अनावश्यक सीमाओं के टन के साथ एक भयानक प्रणाली है जो बहुत सारे ऊप्स-मोमेंट्स बनाते हैं।
विरोध किया

7

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

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

अफसोस की बात है कि स्क्रिप्ट अजीब और गड़बड़ थीं। स्क्रिप्ट के साथ समस्याओं के चारों ओर काम करने के लिए (जो सीमित हार्डवेयर के कारण उपकरणों में डिज़ाइन की खामियों के लिए एक काम के आसपास थे) अंततः लोगों ने चीजों को आसान बनाने के लिए उपयोगिताओं का आविष्कार किया, जैसे कि make

तथापि; makefiles अजीब और गन्दा है। मेकफाइल्स के साथ समस्याओं के चारों ओर काम करने के लिए (जो कि एक काम के लिए काम के इर्द-गिर्द काम कर रहे थे - सीमित हार्डवेयर के कारण उपकरणों में डिज़ाइन की खामियों के लिए) लोगों ने ऑटो-जेनरेटेड मेकफाइल्स के साथ प्रयोग करना शुरू कर दिया; निर्भरता उत्पन्न करने के लिए कंपाइलर प्राप्त करने जैसी चीजों से शुरू करना; और ऑटो-कॉन्फिडेंस और सेमीके जैसे टूल्स तक ले जाना।

यह वह जगह है जहां अब हम हैं: एक काम के लिए काम-अराउंड के लिए एक काम के आसपास-के लिए सीमित हार्डवेयर की वजह से उपकरण में डिजाइन खामियों के लिए।

यह मेरी उम्मीद है कि सदी के अंत तक मौजूदा ढेर के ऊपर "वर्क-अराउंड फॉर वर्क-अराउंड" की कुछ और परतें होंगी। विडंबना यह है कि गंभीर हार्डवेयर सीमाएं, जो इस सब के कारण कई दशक पहले गायब हो गई थीं और एकमात्र कारण अब भी हम इस तरह के पुरातन गंदगी का उपयोग कर रहे हैं " यह है कि यह हमेशा कैसे किया जाता है "।


1
तो क्या विकल्प है? क्या विकल्प पूरी तरह से बिल्ड की अवधारणा को बदल रहा है जैसा कि हम जानते हैं?
JParrilla

1
@Darkslash: एक बार जब आप (काल्पनिक) विकल्पों पर विचार करना शुरू करते हैं, तो यह फ्लडगेट खोलने जैसा होता है - आप हर चीज पर सवाल उठाना (और शब्दार्थ और वाक्यविन्यास को अलग करने, और आईडीई और टूल को अलग करने और व्यक्तिगत टुकड़ों के बजाय एक सेट के रूप में वितरण के साथ समाप्त करते हैं) बड़ी पहेली)। अधिक व्यावहारिक यह महसूस करना है कि उपकरण cmakeकेवल लक्षणों का इलाज करते हैं और मूल कारण / इलाज नहीं कर सकते हैं; इससे इस तथ्य को स्वीकार करना आसान हो जाता है कि आपके पास उन साधनों का उपयोग करने के अलावा कोई विकल्प नहीं है जो संभवतः "आदर्श" के करीब नहीं होंगे।
ब्रेंडन

5
Makefiles किसी भी तरह से 'अजीब और गड़बड़' नहीं हैं। वे अविश्वसनीय रूप से सुरुचिपूर्ण हैं: makeअपने दिल में एक एसाइक्लिक निर्भरता ग्राफ को पार करने के लिए एक इंजन है। 'स्क्रिप्ट' या कमांड लाइन के बारे में कुछ भी 'पुरातन' नहीं है।
मील्स रूट

1
@ माइल्सआउट: अजीब और गन्दा हिस्सा ग्राफ निर्माण है। ट्रैवर्सल काफी सुरुचिपूर्ण है। लेकिन सिर्फ गन्दे हिस्से का सबसे सामान्य उदाहरण लें: सी हेडर फाइलें। प्रत्येक #includeएक किनारे है, लेकिन makeसी फ़ाइलों को पार्स नहीं कर सकता। अभी भी कोई समस्या नहीं है, क्योंकि makeइन किनारों को अगले नोड (* .o फ़ाइल) के साथ संग्रहीत किया जा सकता है , लेकिन यह ऐसा नहीं करता है।
MSalters

3
मैं सहमत नहीं हूं कि एक बेहतर डिजाइन संभव है। makeसिर्फ सी संकलन के लिए नहीं है! आप एक प्रोग्राम चाहते हैं जो लेता है .cऔर .hफ़ाइलें और Makefileएस देता है । लेकिन यह नहीं है make, और यह नहीं है कि क्या makeकरना चाहिए। फिर, makeसी के बारे में सब नहीं है, और एक सी-विशिष्ट समाधान में बनाया गया makeएक बुरा विचार है (और संयोग से UNIX दर्शन का उल्लंघन है)।
माइल्स राउत

5

make (एक मेकफाइल के माध्यम से इसका उपकरण या प्रत्यक्ष उपयोग) पुराना नहीं है, विशेष रूप से "छोटी, व्यक्तिगत परियोजनाओं" के लिए जैसा कि आप इसका उपयोग करते हैं।

बेशक, आप इसे बड़ी परियोजनाओं के लिए भी उपयोग कर सकते हैं, जिसमें कई प्लेटफार्मों के लिए लक्षित भी शामिल हैं। साथ लक्ष्य-विशिष्ट चरों आप आसानी से अनुकूलित कैसे आप विभिन्न प्लेटफार्मों के लिए निर्माण कर सकते हैं। आजकल, लिनक्स वितरण क्रॉस-कंपाइलिंग टूलचाइन्स (जैसे mingw-w64 ) के साथ आते हैं, ताकि आप लिनक्स से एक पूर्ण विंडोज सॉफ्टवेयर पैकेज (इंस्टॉलर के साथ यदि आपको पसंद है) का निर्माण कर सकें, जो आपके मेकफाइल से संचालित होता है।

Cmake और qmake जैसे उपकरण उपयोगी हो सकते हैं, लेकिन वे उनकी समस्याओं के बिना नहीं हैं। वे आमतौर पर किसी भी पुस्तकालयों के साथ ही एक आवेदन के निर्माण के लिए ठीक हैं (हालांकि मुझे हमेशा समस्या थी कि पुस्तकालयों और कार्यक्रमों के बीच उचित निर्भरता की जाँच करें जो उनका उपयोग करते हैं), लेकिन मैं हमेशा उन उपकरणों की बाधाओं के साथ संघर्ष करता हूं जब बाकी काम करते हैं जॉब (इंस्टॉलर बनाना, डॉक्यूमेंट या ट्रांसलेशन फाइल बनाना, असामान्य सामान करना जैसे कि एक आर्काइव को शेयर्ड लाइब्रेरी में बदलना आदि)। यह सब किया जा सकता है make, हालांकि निर्भरता ट्रैकिंग जैसी चीजों के लिए थोड़े प्रयास की आवश्यकता हो सकती है।

क्यूटी क्रिएटर और एक्लिप्स जैसे आईडीई भी मेकफाइल-आधारित परियोजनाओं को आयात कर सकते हैं, इसलिए आप आईडीई-उपयोग करने वाले डेवलपर्स के साथ साझा कर सकते हैं। मुझे लगता है कि क्यूटी निर्माता आईडीई सी ++ आईडीई के रूप में उत्कृष्ट है, लेकिन कुछ समय ईमैक के साथ अधिक प्रभावी बनने के लिए खर्च करने के बाद, और जब से मैं अधिक एडीए विकास कर रहा हूं, मैं खुद को हर चीज के लिए एमएसीएस पसंद कर रहा हूं। makeमेरे Makefile में पोस्ट-लिंक चरण के रूप में , इस प्रश्न के बारे में वापस संबंधित करने के लिए , मैं अपनी TAGS फ़ाइल ( Emacs में प्रतीक नेविगेशन के लिए ) के साथ लोड करता हूं M-x visit-tags-table:

find $(SRC_DIR) $(TEST_DIR) -regex ".*\.[ch]\(pp\)?" -print | etags -

या अडा विकास के लिए:

find $(SRC_DIR) $(TEST_DIR) -name "*.ad?" -print | etags -

2

यह उत्तर @lxrec उत्तर का पूरक है।

Makefiles का उपयोग कई चीजों के लिए किया जा सकता है, न कि स्रोत कोड से केवल एक प्रोग्राम / लाइब्रेरी बनाने के लिए। सीएमके या ऑटोटूल जैसे सिस्टम का निर्माण कोड लेने के लिए तैयार किया गया है, और इसे इस तरह से बनाया गया है कि उपयोगकर्ता के प्लेटफ़ॉर्म में फिट हो सके (यानी लाइब्रेरी ढूंढें या सही संकलन विकल्प निर्दिष्ट करें)। आप उदाहरण के लिए एक मेकफाइल हो सकते हैं जो कुछ रिलीज कार्यों को स्वचालित करने में मदद करता है, जैसे: एक ज़िप फ़ाइल का निर्माण करें जिसमें गिट से प्राप्त संस्करण के साथ कोड हो; अपने कोड के विरुद्ध परीक्षण चलाएं; अपलोड ने कहा कि कुछ होस्टिंग सेवा के लिए ज़िप फ़ाइल। कुछ बिल्ड सिस्टम (जैसे स्वचालित) ऐसा करने का एक आसान तरीका प्रदान कर सकते हैं, अन्य नहीं कर सकते हैं।

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


1

मुझे नहीं लगता कि मानव लिखित Makefile-अप्रचलित हैं, खासकर जब:

  1. POSIX मेक का उपयोग करना, जो आपको एक पोर्टेबल देता है Makefile
  2. या GNU मेक 4 का उपयोग करके, जो आपको कई बहुत ही रोचक सुविधाएँ प्रदान करता है, विशेष रूप से GUILE स्क्रिप्टिबिलिटी में, जो Makefileजनरेटर द्वारा प्रदान की गई फैंसी विशेषताओं को कुशलतापूर्वक कोड करने में सक्षम बनाता है (मेरा मानना ​​है कि ऑटोटूलस या सीमेक की विशेषताएं जीएनयू के गिले अनुकूलन द्वारा आसानी से लिखी जा सकती हैं। )। बेशक, भुगतान करने की कीमत को जीएनयू मेक 4 (बड़ी बात नहीं, आईएमएचओ) की आवश्यकता होती है।

0

Makefiles अप्रचलित नहीं हैं, उसी तरह से जैसे कि टेक्स्ट फाइलें अप्रचलित नहीं हैं। सादे पाठ में सभी डेटा संग्रहीत करना हमेशा चीजों को करने का सही तरीका नहीं है, लेकिन यदि आप चाहते हैं कि एक टोडो सूची है तो एक सादा पाठ फ़ाइल ठीक है। कुछ अधिक जटिल के लिए आप मार्कडाउन या एक्सएमएल जैसे अधिक जटिल प्रारूप या बीच में एक कस्टम बाइनरी प्रारूप या कुछ भी चाहते हैं, लेकिन सरल मामलों के लिए सादा पाठ ठीक काम करता है।

इसी तरह, अगर आप चाहते हैं, तो हर g++ -g src/*.c -o blah -W -Wall -Werror && ./blahसमय लिखने से बचने का एक तरीका है , एक हाथ से लिखा मेकफाइल एकदम सही है!

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


"लगभग हर जगह संकलन करेगा" -> "सबसे हाल ही में यूनिक्स जैसी प्रणालियों का संकलन करेगा"। मुझे नहीं लगता कि autotoolsविंडोज सिस्टम पर किसी भी प्रासंगिक डिग्री के लिए काम करता है, उदाहरण के लिए (साइगविन / मिंगडब्ल्यू को छूट देना, जो वास्तव में विंडोज के शीर्ष पर यूनिक्स जैसी प्रणाली है)।
12

इसका हाल में होने से कोई लेना-देना नहीं है। ऑटोटूलस का लाभ यह है कि यह हर दूरस्थ POSIX जैसी प्रणाली पर काम करता है। विंडोज कुछ POSIX कंप्लेंट है।
माइल्स रुट

हां, मैं सही हूं। वास्तव में, मुझे याद है कि ऑटोटूलस की एक आलोचना ठीक है कि इसमें बहुत पुरानी प्रणालियों के लिए भी कोड है, इसलिए "हाल ही में" खरोंच। मैं अभी भी विंडोज भाग द्वारा खड़ा हूं, हालांकि।
सलेस्के

और इसके लिए दोष पूर्ण रूप से Microsoft के पास है। यदि वे एक गुणवत्ता वाले उत्पाद का निर्माण करने की परवाह करते हैं, तो विंडोज में अंतर्राष्ट्रीय ऑपरेटिंग सिस्टम मानकों (जैसे POSIX) के लिए उचित समर्थन होगा। POSIX, एक "यूनिक्स बात" बस नहीं है, यह है सभी ऑपरेटिंग सिस्टम के लिए पोर्टेबल ऑपरेटिंग सिस्टम मानक। विंडोज जंक का सिर्फ एक गैर-योग्य ढेर है।
मील्स राउत

@MilesRout अभी भी लब्बोलुआब यह है कि "वस्तुतः हर जगह" 90% डेस्कटॉप कंप्यूटर को शामिल नहीं करता है
el.pescado

-2

यदि आपकी परियोजना सरल है और इसमें बहुत कम फाइलें हैं, तो कोई भी मेक फाइल की जरूरत नहीं है।

हालाँकि, जब प्रोजेक्ट जटिल होता है, तो कई मेमोरी क्षेत्रों का उपयोग करता है, कई फाइलें होती हैं, तो प्रत्येक मेमोरी क्षेत्र को पता योग्य मेमोरी में सही स्थान पर रखना आवश्यक होता है, हर बार एक तुच्छ परिवर्तन के लिए हर फाइल को दोबारा नहीं करना अत्यधिक वांछनीय है। एक फ़ाइल के लिए बनाया,

यदि आप पुरानी फ़ाइलों / संकलन / लिंक को मिटाना चाहते हैं और कम से कम परेशानी और कीप गलतियों की संभावना के साथ स्थापित करते हैं, तो मेकफाइल एक वास्तविक वरदान है।

जब आप 'वास्तविक दुनिया' परियोजनाओं में आते हैं, तो शायद ही कभी सिर्फ 1 या 2 फाइलें होती हैं, बल्कि सैकड़ों फाइलें होती हैं। एक मेकफाइल हमेशा सही कार्य करेगा और कोई अनावश्यक कार्य नहीं करेगा (इसके बाद डीबग किया जाता है) इसलिए आप केवल एक साधारण कमांड टाइप करते हैं और मेकफाइल सभी काम करता है


1
इसका जवाब नहीं था कि इसके विपरीत या इसके विपरीत क्यों पसंद makeकिया जाए cmake
एक्सट्रीम 3

Makefiles का उपयोग करने से हर बार सभी फ़ाइलों का पुनर्निर्माण नहीं होता है। (वरना सीएमके या ऑटो-टूल इसका इस्तेमाल नहीं कर सकते)
ideasman42
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.