मुझे अपना स्रोत कोड बनाने में सक्षम होने से पहले make target
बनाने की आवश्यकता क्यों है?'लक्ष्य बनाना' क्या है?
अधिक विशेष रूप से, make target बिल्कुल क्या है?
मुझे अपना स्रोत कोड बनाने में सक्षम होने से पहले make target
बनाने की आवश्यकता क्यों है?'लक्ष्य बनाना' क्या है?
अधिक विशेष रूप से, make target बिल्कुल क्या है?
Makefiles इस तरह दिखेगा:
all: mybinary
mybinary: files.o it.o depends.o on.o
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary
files.o: files.c files.h
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o [email protected]
...
इसका मतलब यह है, जब आप लिखते हैं make all
(संक्षेप सिर्फ टाइप करने के लिए है make
), यह सुनिश्चित करें कि mybinary लक्ष्य या फ़ाइल अप टू डेट है कर देगा। ऐसा करने के लिए, यह सुनिश्चित करने की ज़रूरत है कि माइबिनरी सभी फ़ाइलों की तुलना में नई है। यह it.o निर्भर करता है .o और on.o. यदि नहीं, तो यह माइबिनरी बनाने के लिए अगली पंक्ति पर निर्दिष्ट शेल कमांड का उपयोग करता है। लेकिन ऐसा करने से पहले, यह पहले सुनिश्चित करता है कि फ़ाइलें.o और इतने पर अद्यतित हैं। इसका मतलब है कि उन्हें files.c और files.h से नए होना चाहिए। यदि नहीं, तो यह फ़ाइलों को बनाने के लिए अगली पंक्ति पर निर्दिष्ट शेल कमांड का उपयोग करता है। एक बार सभी * .o फ़ाइलें अद्यतित हो जाने पर, यह माइबिनरी बना सकती है। एक बार माइबिनरी बनने के बाद, सभी लक्ष्य संतुष्ट हैं।
लक्ष्य आमतौर पर केवल फाइलें होती हैं। एक ब्लॉक का प्रारूप है:
target: list of dependency files
[tab]shell commands to build target if it's older than any of its dependencies
[tab]more shell commands
[tab]still more
लक्ष्य भी उदाहरण के लिए %.c
का मतलब क्या खोल में आप *.c
फोन चाहते हैं, वाइल्डकार्ड का उपयोग निर्दिष्ट किया जा सकता।
कुछ लक्ष्य "नकली" लक्ष्य हैं जिसका अर्थ है कि वे किसी वास्तविक फ़ाइल से मेल नहीं खाते हैं। "सभी" लक्ष्य इस तरह का है। तो भी "साफ" लक्ष्य है (make clean
)। और इसी तरह। आपको वास्तव में "सभी" या "साफ" नामक फ़ाइल बनाने की आवश्यकता नहीं है या नहीं। यह निर्दिष्ट करने के कई तरीके हैं कि एक लक्ष्य नकली है।
मेकफ़ाइल में दिखाई देने वाला पहला लक्ष्य वह है जिसे आप make
टाइप करते हैं। एक सम्मेलन इस लक्ष्य को "सब" नाम देना है। तो make
make all
जैसा ही होगा।
ए makefile
आमतौर पर आपके प्रोग्राम को बनाने, अपना प्रोग्राम इंस्टॉल करने, बाद में साफ करने और अन्य चीजों को कोड करने के लिए कोड शामिल होगा।
तो शब्द target
विभिन्न खोजशब्दों, इस तरह के all
, install
, clean
, आदि
के रूप में यह कुछ बनाने के कहने का एक तरीका हो सकता है। make all
का अर्थ है सबकुछ करें
कड़ाई से, निश्चित रूप से, '' सब कुछ करें '' केवल तात्पर्य है (राज्य) "यह सुनिश्चित करने के लिए आवश्यक कार्य करें कि 'सब' अद्यतित है"। आम तौर पर, लोग मेकफ़ाइल लिखते हैं ताकि आप जो कुछ भी चाहते हैं वह करता है (लेकिन यह स्वचालित रूप से इंस्टॉल नहीं होता है, उदाहरण के लिए)। लेकिन यह सिर्फ एक सम्मेलन है। –
ए 'लक्ष्य बनाना' मूल रूप से एक फ़ाइल है जिसे आप पुनर्निर्मित करना चाहते हैं।
जो भी आप चाहते हैं वह दिव्य नहीं बना सकते हैं, इसलिए आपको इसे स्पष्ट रूप से या स्पष्ट रूप से बताना होगा, इसे क्या बनाना चाहिए। अक्सर, फ़ाइल में पहला लक्ष्य 'सब' जैसे नाम है और यदि आप किसी भी स्पष्ट लक्ष्य के बिना 'मेक' चलाते हैं, तो यह मेकफ़ाइल में सूचीबद्ध पहला लक्ष्य बनाएगा। हालांकि, कुछ मेकफ़ाइल किसी भी लक्ष्य को निर्दिष्ट नहीं करते हैं; तो आपको कमांड लाइन पर एक निर्दिष्ट करना होगा। या, यदि आप डिफ़ॉल्ट लक्ष्य को नहीं चाहते हैं, तो आपको उस लक्ष्य को निर्दिष्ट करना होगा जिसे आप बनाना चाहते हैं।
जीएनयू बनाने के मामले में एक लक्ष्य 'फोनी' भी हो सकता है। यही है, यह एक ऐसा नाम है जो अस्तित्व में नहीं है, और नियम इसे नहीं बनाते हैं, लेकिन यह (नकली लक्ष्य) उन अन्य फ़ाइलों पर निर्भर करता है जिनके नियम उनके साथ जुड़े होते हैं। दरअसल, 'सभी' लक्ष्य आमतौर पर एक क्रोध लक्ष्य होता है - अधिकांश निर्देशिकाओं में 'सभी' नामक फ़ाइल नहीं होती है।
make
एक आम विकास उपकरण है, जो स्रोत कोड फ़ाइलों और उनके द्वारा उत्पादित ऑब्जेक्ट कोड के बीच फ़ाइल तिथियों की जांच करता है, और उस स्रोत को संकलित करता है जहां स्रोत नया है। यह एक फ़ाइल का उपयोग करके करता है, जिसे मेकफ़ाइल कहा जाता है, जो उन फ़ाइलों को सूचीबद्ध करता है जिन्हें तुलना करने की आवश्यकता होती है।
मानक वाक्य रचना make /f makefile myprog.exe
makefile में फ़ाइल सूची का उपयोग कर myprog.exe निर्माण करने के लिए कहते हैं यही कारण है। मेकफ़ाइल makefile.mak
पर डिफ़ॉल्ट है, इसलिए यदि आप उस नाम का उपयोग करते हैं, तो आपको इसे कमांड लाइन पर निर्दिष्ट करने की आवश्यकता नहीं है।
myprog.exe
यहां लक्ष्य कहा जाता है। एक चाल यह है कि आप मेकफ़ाइल को एक गैर-मौजूद फ़ाइल के लिए निर्माण निर्देशों की एक सूची में डाल सकते हैं। यदि आप उस लक्ष्य को बनाने के लिए कहते हैं, तो यह उन आदेशों को चलाएगा। अक्सर, आपको make clean
जैसे कुछ दिखाई देंगे, जिसमें अस्थायी फ़ाइल हटा दी गई है।
"मानक" अर्थ? – Pacerier
मतलब यह है कि अधिकांश 'मेक' प्रोग्राम उस अनुच्छेद को स्वीकार करेंगे जो मैंने अगले पैराग्राफ में वर्णित किया है। 'मेक' के कई प्रकार हैं, इसलिए मैं उन सभी के लिए बात नहीं कर सकता, लेकिन अधिकांश सिंटैक्स स्वीकार करेंगे। –
क्या वास्तव में 'मेक' के लिए कोई अनुशंसित आधिकारिक "मानक" है? – Pacerier
पुन "* यह सुनिश्चित करने की ज़रूरत है कि माइबिनरी सभी फाइलों की तुलना में नई है। यह it.o निर्भर करता है .o और on.o *" ...; यह कैसे किया जाता है? क्या यह अंतिम संशोधित समय की फाइल की तुलना करके किया जाता है? – Pacerier
हां, अंतिम बार संशोधित समय की तुलना करके फ़ाइल। असल में, यह यूनिक्स उपयोगिता 'स्पर्श' के निर्माण का कारण बनता है जिसका उद्देश्य किसी फ़ाइल की संशोधित तिथि को अपडेट करना है, ताकि निर्माण को ट्रिगर किया जा सके। –