2013-03-24 23 views
7



मैं "हार्ड सी सीखें" के माध्यम से सी प्रोग्रामिंग सीख रहा हूं। मैं वर्तमान में व्यायाम 1 पर हूं, जो यहां पाया जा सकता है: http://c.learncodethehardway.org/book/ex1.html"मेक" सी प्रोग्रामिंग का उपयोग करना (सी हार्ड ड्राइव सीखें)

मैं अवधारणा को कवर किया गया समझता हूं, लेकिन संकलन प्रक्रिया को समझ नहीं पा रहा हूं। आदेश पंक्ति में "बनाने" आदेश का उपयोग करते हैं, यही कारण है कि यह काम करता है:

$ make ex1 

और यह काम नहीं:

$ make ex1.c 

मैं वास्तव में सिर्फ एक मिनट पहले तक दूसरा आदेश चल रहा था। आखिर में मैंने इसे समझ लिया। जब तक मैंने किया था, मैं इस त्रुटि संदेश मिल रहा रखा: एक ओर जहां यह एक सिर्फ एक तकनीकी है

make: nothing to be done for 'ex1.c' 

, मैं अभी भी पता करने के लिए क्या हो रहा है करना चाहते हैं। धन्यवाद :)

+0

gcc ex1.c -o ex1 नहीं है? क्योंकि जीसीसी सी संकलक है। – Survivor

+0

यह प्रश्न सी भाषा की तुलना में 'मेक' प्रोग्राम के बारे में अधिक है। – aschepler

+0

क्षमा करें, यह सभी भविष्य के प्रश्नों में ध्यान में रखेगा। यह वास्तव में स्टैक ओवरफ्लो पर मेरी पहली पोस्ट थी, और जवाब आश्चर्यजनक रूप से जल्दी रहे हैं! आप सभी को एक बार फिर धन्यवाद। – antigravityguy

उत्तर

12

दोनों काम; वे सिर्फ अलग-अलग कार्य करते हैं।

  • make ex1.c कहते हैं, "makefile प्लस में निर्मित ज्ञान में नियमों का उपयोग, यह सुनिश्चित करें कि फ़ाइल ex1.c अप टू डेट है"।

    make कार्यक्रम ex1.c पाता है और कोई नियम नहीं है, कुछ और (कोई आरसीएस या SCCS स्रोत कोड, उदाहरण के लिए) से इसे बनाने की तो यह रिपोर्ट 'कुछ भी नहीं किया जा सकता'।

  • make ex1 कहता है "मेकफ़ाइल प्लस अंतर्निहित ज्ञान में नियमों का उपयोग करके, सुनिश्चित करें कि फ़ाइल ex1 अद्यतित है"।

    make कार्यक्रम पता चलता है कि यह स्रोत फ़ाइल ex1.c से एक निष्पादन ex1 बनाने के लिए एक तरह से जानता है, तो यह सुनिश्चित करता है कि स्रोत फ़ाइल ex1.c अप टू डेट है (यह मौजूद है, तो यह अप टू डेट है), और फिर सुनिश्चित करता है कि ex1 भी अद्यतित है (जिसका अर्थ है 'फ़ाइल ex1 को ex1.c से हाल ही में संशोधित किया गया था)। यदि आपने ex1.c संपादित किया है क्योंकि आपने पिछली बार make चलाया था, तो यह ex1.c से ex1 नया बनाने के लिए संकलन करेगा। यदि संकलन विफल रहता है, तो फ़ाइल ex1 मौजूद नहीं होगी, इसलिए अगली बार आपको एक और पुन: संकलन मिल जाएगा। और एक बार यह अद्यतित होने के बाद, make फिर से स्रोत को संशोधित करने तक ex1 पुनर्निर्माण नहीं करेगा।

यह तरीका है make काम करने के लिए डिज़ाइन किया गया है।

+0

वास्तव में विस्तृत प्रतिक्रिया के लिए धन्यवाद। यह समझ में आता है, हालांकि पाइथन पर्यावरण से आ रहा है, यह वास्तव में कठोर – antigravityguy

+4

लगता है कि मैंने पहले कभी उस साइट को नहीं देखा था, लेकिन एक्स 2 का शीर्षक, "मेक इज योर पायथन अब" बहुत भ्रामक है। मुझे लगता है कि वे क्या कहने की कोशिश कर रहे हैं, लेकिन मेक पाइथन नहीं है। मेक और पायथन की तुलना करना एक नक्काशीदार चाकू की तुलना रसोईघर में करना है। मेक विशेष रूप से पुरानी फाइलों को अपडेट करने के लिए डिज़ाइन किया गया है। यह उस पर बहुत अच्छा है। पायथन को एक सामान्य उद्देश्य भाषा के रूप में डिजाइन किया गया है। यह उस पर बहुत अच्छा है। मैं आपको इस तुलना को अनदेखा करने की सलाह देता हूं: यह मुझे रोशनी से ज्यादा भ्रमित लगता है। – MadScientist

4

make का लक्ष्य आमतौर पर निर्दिष्ट करता है कि आप इसे बनाना या पुनर्निर्माण करना चाहते हैं, न कि आप इसे और कुछ बनाने के लिए उपयोग करना चाहते हैं।

यदि आप ex1.c टाइप करते हैं (और इसे स्वतः उत्पन्न करने का कोई नियम नहीं है), तो अनिवार्य रूप से केवल "यूप, वह फ़ाइल मौजूद है" का उत्तर दें।

1

make उपकरण के लिए तर्क है कि यह आप के लिए बनाने में मदद करेंगे निष्पादन योग्य फ़ाइल का नाम है। इसमें .c एक्सटेंशन नहीं होना चाहिए।आपके पास लिखा गया make ex1 होना चाहिए।

संबंधित मुद्दे