मेकफ़ाइल में वाइल्डकार्ड और फ़ोरैच

Mekafa Ila Mem Va Ildakarda Aura Foraica



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

मेकफ़ाइल में वाइल्डकार्ड

सामान्य तौर पर, वाइल्डकार्ड को एक ऐसे कारक के रूप में जाना जाता है जिसकी भविष्यवाणी नहीं की जा सकती है और यह स्थिति को किसी भी तरह से बदल सकता है। मेकफ़ाइल में वाइल्डकार्ड का उपयोग वर्तमान कार्यशील निर्देशिका से सभी संभावित पैटर्न का पता लगाने के लिए किया जाता है, चाहे वह फ़ाइल हो या कोई फ़ोल्डर। ये स्रोत फ़ाइलें किसी भी प्रकार की हो सकती हैं।







मेकफ़ाइल में वाइल्डकार्ड का उपयोग करने के लिए, आपको 'वाइल्डकार्ड' कीवर्ड का उपयोग करना चाहिए जो तारांकन '*' या '?' साइन और फ़ाइल एक्सटेंशन जो एक बिंदु के माध्यम से जुड़ा हुआ है। आप '?' का भी उपयोग कर सकते हैं किसी एकल वर्ण को खोजने के लिए चिह्न और किसी भी संख्या में वर्णों का मिलान करने के लिए “*” पर हस्ताक्षर करें। इस संपूर्ण संरचना का उपयोग कोष्ठक और '$' चिह्न के भीतर किया जाना चाहिए। उदाहरण के लिए, हम 'एसआरसीएस' वेरिएबल घोषित करते हैं जो वाइल्डकार्ड के माध्यम से अपनी वैल्यू फ़ाइल प्राप्त करता है। यह वाइल्डकार्ड अंत में 'सीपीपी' पैटर्न वाली सभी फाइलों को ढूंढता है।





मेकफ़ाइल में फ़ोरैच

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





स्रोत:= फ़ाइल1.सी फ़ाइल2.सी फ़ाइल3.सी
वस्तुएँ := $ ( foreach स्रोत,$ ( सूत्रों का कहना है ) ,$ ( src:.c=.o ) )
$वस्तुएँ : % .O: % ।सी
$ ( सीसी ) $ ( सीएफएलजीएस ) -सी $ < -ओ $ @

उदाहरण 1: वाइल्डकार्ड का उपयोग करना

वाइल्डकार्ड और फ़ोरैच फ़ंक्शंस का चित्रण और कार्यप्रणाली प्रदर्शित करने के लिए, हम एक C++ फ़ाइल प्रस्तुत करते हैं। यह 'salary.cpp' फ़ाइल इनपुट और आउटपुट स्ट्रीम के सुचारू उपयोग की अनुमति देने के लिए 'iostream' हेडर के उपयोग से शुरू की गई है। मुख्य विधि रनटाइम पर इनपुट मान मांगने के लिए पूर्णांक प्रकार का एक वैरिएबल 'एस' और 'काउट' स्टेटमेंट घोषित करती है। 'सिन' मानक इनपुट स्ट्रीम रनटाइम पर उपयोगकर्ता से मूल्य प्राप्त करता है और इसे वेरिएबल 'एस' में सहेजता है। 'काउट' कंसोल स्क्रीन पर उपयोगकर्ता द्वारा इनपुट किए गए मान को प्रदर्शित करता है।

#शामिल करें
नेमस्पेस एसटीडी का उपयोग करना;
मुख्य प्रवेश बिंदु ( ) {
पूर्णांक s;
अदालत << 'वेतन दर्ज करें:' ;
खाना >> एस;
अदालत << ' \एन वेतन: ' << एस << एंडल;
वापस करना 0 ;
}



हम मेकफ़ाइल को 'CXX' वेरिएबल से शुरू करते हैं जो C++ के लिए कंपाइलर को परिभाषित करता है, और CXXFLAGS वेरिएबल C++ कंपाइलर के लिए झंडे रखता है। EXECUTABLE वैरिएबल एक निष्पादन योग्य 'हैलो' फ़ाइल का नाम रखता है जो मेकफ़ाइल के निष्पादन के बाद उत्पन्न होता है। SRCS वेरिएबल को '.cpp' पर समाप्त होने वाले किसी भी पैटर्न को खोजने के लिए वाइल्डकार्ड '*' का उपयोग करके वर्तमान निर्देशिका से सभी C++ फ़ाइलें मिलती हैं। ओबीजेएस वेरिएबल एसआरसीएस वेरिएबल का उपयोग करके बनाई जाने वाली ऑब्जेक्ट फ़ाइलों के नाम रखता है, जो 'सीपीपी' एक्सटेंशन को 'ओ' से बदल देता है। डिफ़ॉल्ट 'सभी' लक्ष्य मेकफ़ाइल बनाता है और यह निष्पादन योग्य चर पर निर्भर करता है।

पहला नियम लक्ष्य 'हैलो' फ़ाइल बनाता है जो 'ओबीजेएस' वेरिएबल के माध्यम से उत्पन्न फ़ाइल नामों का उपयोग करके ओबीजेएस वैरिएबल (ऑब्जेक्ट फ़ाइलों के नाम) ऑब्जेक्ट फ़ाइल पर निर्भर करता है। दूसरा मेकफ़ाइल नियम '.o' एक्सटेंशन के साथ ऑब्जेक्ट फ़ाइल उत्पन्न करता है जो C++ कोड फ़ाइल को संकलित करने के बाद C++ फ़ाइल पर निर्भर करता है। यहां, '%' किसी भी पैटर्न के फ़ाइल नाम की खोज करने के लिए एक वाइल्डकार्ड है जो 'सीपीपी' के साथ समाप्त होता है। अंत में, स्वच्छ लक्ष्य '-f' ध्वज का उपयोग करके निर्देशिका से नव निर्मित निष्पादन योग्य और ऑब्जेक्ट फ़ाइलों को बलपूर्वक साफ़ करने के लिए अपने 'आरएम' कमांड का उपयोग करता है।

सीएक्सएक्स = जी++
CXXFLAGS = -दीवार -एसटीडी =सी++ ग्यारह
निष्पादन योग्य = नमस्ते
एसआरसीएस = $ ( वाइल्डकार्ड * सीपीपी )
ओबीजेएस = $ ( एसआरसीएस:.सीपीपी=.ओ )
सभी: $ ( निष्पादन )
$ ( निष्पादन ) :$ ( ओबीजेएस )
$ ( सीएक्सएक्स ) $ ( CXXफ़्लैग ) -ओ $ @ $ ( ओबीजेएस )
% .O: % सीपीपी
$ ( सीएक्सएक्स ) $ ( CXXफ़्लैग ) -सी $ < -ओ $ @
साफ:
आर एम -एफ $ ( निष्पादन ) $ ( ओबीजेएस )

'मेक' निर्देश चलाने पर, लक्ष्य और ऑब्जेक्ट दोनों फ़ाइलें बनाई गईं। निष्पादन योग्य 'हैलो' फ़ाइल निष्पादित करने के बाद, उपयोगकर्ता को वेतन दर्ज करने के लिए कहा जाता है और हम '67000' जोड़ते हैं। अंत में, वेतन वापस प्रदर्शित किया जाता है।

बनाना

उदाहरण 2: फ़ोरैच का उपयोग करना

वाइल्डकार्ड का उपयोग करने के बाद, मेकफ़ाइल में फ़ोरैच फ़ंक्शन का उपयोग करने का समय आ गया है। बाकी मेकफ़ाइल कोड वही है। लाइन 6 पर, हम एक और वेरिएबल आरंभ करते हैं जो तीन मानों की सूची के साथ 'नाम' है - केट, किम, टिम। डिफ़ॉल्ट 'सभी' लक्ष्य निष्पादन योग्य चर (लक्ष्य फ़ाइल नाम 'हैलो') और फ़ोरैच स्टेटमेंट पर निर्भर करता है। 'Addprefix' फ़ंक्शन 'NAMES' सूची में प्रत्येक नाम के प्रारंभ में 'run_' उपसर्ग लगाकर गतिशील रूप से लक्ष्य नाम उत्पन्न करने के लिए 'NAMES' चर को पुनरावृत्त करता है।

आठवीं पंक्ति का नियम इंगित करता है कि आउटपुट निष्पादन योग्य लक्ष्य फ़ाइल, यानी हैलो, 'ओबीजेएस' पर निर्भर है। '-o' ध्वज OBJS का उपयोग करके लक्ष्य आउटपुट फ़ाइल उत्पन्न करता है। दसवीं पंक्ति का नियम 'सीपीपी' एक्सटेंशन के साथ स्रोत फ़ाइलों का उपयोग करके लक्ष्य ऑब्जेक्ट फ़ाइल उत्पन्न करता है। ऐसा करने के लिए, '-सी' ध्वज का उपयोग स्रोत फ़ाइल को संकलित करने और संबंधित ऑब्जेक्ट फ़ाइल उत्पन्न करने के लिए किया जाता है जो लक्ष्य पीढ़ी के लिए आवश्यक है। तेरहवीं पंक्ति में, हम उपसर्ग के रूप में 'run_' से शुरू होने वाले विभिन्न नामों के साथ आउटपुट उत्पन्न करने के लिए EXECUTABLE वैरिएबल का उपयोग करते हैं। अंत में, स्वच्छ लक्ष्य और फ़ोनी लक्ष्य ऑब्जेक्ट और लक्ष्य फ़ाइलों को हटा देंगे और साफ़ कर देंगे।

सीएक्सएक्स = जी++
CXXFLAGS = -दीवार -एसटीडी =सी++ ग्यारह
# निष्पादन योग्य लक्ष्य फ़ाइल
निष्पादन योग्य = नमस्ते
एसआरसीएस = $ ( वाइल्डकार्ड * सीपीपी )
ओबीजेएस = $ ( एसआरसीएस:.सीपीपी=.ओ )
# नामों की सूची
नाम = केट किम टिम
# लक्ष्य
सभी: $ ( निष्पादन ) $ ( addprefix run_, $ ( नाम ) )
$ ( निष्पादन ) :$ ( ओबीजेएस )
$ ( सीएक्सएक्स ) $ ( CXXफ़्लैग ) -ओ $ @ $ ( ओबीजेएस )
% .O: % सीपीपी
$ ( सीएक्सएक्स ) $ ( CXXफ़्लैग ) -सी $ < -ओ $ @
# प्रत्येक नाम के लिए लक्ष्य बनाएं
दौड़ना_ % :$ ( निष्पादन )
. / $ ( निष्पादन ) $*
साफ:
आर एम -एफ $ ( निष्पादन ) $ ( ओबीजेएस )
# नकली लक्ष्य
.फोनी: सब साफ़

'मेक' निर्देश का उपयोग निष्पादन योग्य 'हैलो' लक्ष्य उत्पन्न करता है और 'नाम' चर में निर्दिष्ट प्रत्येक नाम के लिए प्रोग्राम चलाता है।

बनाना

आप 'रन_' उपसर्ग वाली सूची से नाम का उपयोग करके भी अपने आउटपुट को संशोधित कर सकते हैं।

रन_किम बनाओ

निष्कर्ष

इस गाइड ने मेकफ़ाइल में वाइल्डकार्ड और फ़ोरैच अवधारणाओं के उपयोग पर चर्चा करते हुए उनके सिंटैक्स पर अलग से चर्चा की। उसके बाद, हमने समान एक्सटेंशन के साथ फ़ाइलें प्राप्त करने और एक चर सूची में मानों को पुनरावृत्त करने पर आउटपुट के साथ उनके प्रत्येक कार्य के बारे में विस्तार से बताने के लिए कोड उदाहरणों पर चर्चा की।