मेकफाइल - अन्य विशेषताएं

इस अध्याय में, हम मेकफाइल की विभिन्न अन्य विशेषताओं पर ध्यान देंगे।

बनाने का पुनरावर्ती उपयोग

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

subsystem:
   cd subdir && $(MAKE)

or, equivalently:
 	
subsystem:
   $(MAKE) -C subdir

आप पुनरावर्ती लिख सकते हैं makeइस उदाहरण को कॉपी करके कमांड करता है। हालांकि, आपको यह जानने की जरूरत है कि वे कैसे काम करते हैं और क्यों, और उप-स्तर शीर्ष स्तर से कैसे संबंधित हैं।

एक उप-बनाने के लिए चर का संचार

शीर्ष स्तर के परिवर्तनीय मूल्य makeस्पष्ट अनुरोध द्वारा पर्यावरण के माध्यम से उप बनाने के लिए पारित किया जा सकता है। इन चर को उप-मेक में डिफॉल्ट के रूप में परिभाषित किया गया है। जब तक आप `-E 'स्विच का उपयोग नहीं करते हैं, आप उप-मेकफ़ाइल द्वारा उपयोग किए जाने वाले मेकफाइल में निर्दिष्ट नहीं कर सकते।

नीचे, या निर्यात करने के लिए, एक चर, makeप्रत्येक कमांड को चलाने के लिए वैरिएबल और उसके मान को पर्यावरण में जोड़ता है। उप-मेक, बदले में, चर मानों की तालिका को आरंभीकृत करने के लिए पर्यावरण का उपयोग करता है।

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

यदि आप विशिष्ट चरों को उप-बनाना चाहते हैं, तो निर्यात निर्देश का उपयोग करें, जैसा कि नीचे दिखाया गया है -

export variable ...

यदि आप किसी चर को निर्यात होने से रोकना चाहते हैं, तो नीचे दिखाए गए अनुसार, unexport निर्देश का उपयोग करें -

unexport variable ...

परिवर्तनशील मशीनें

यदि पर्यावरण चर MAKEFILES परिभाषित किया गया है, makeदूसरों के सामने पढ़े जाने वाले अतिरिक्त मेकफाइल्स के नामों की सूची (श्वेत स्थान द्वारा अलग) के रूप में इसके मूल्य पर विचार करता है। यह बहुत कुछ शामिल निर्देश की तरह काम करता है: विभिन्न निर्देशिकाओं को उन फ़ाइलों के लिए खोजा जाता है।

MAKEFILES का मुख्य उपयोग पुनरावर्ती आक्रमणों के बीच संचार में है make

विभिन्न निर्देशिकाओं से हैडर फ़ाइल शामिल है

यदि आपने हेडर फ़ाइलों को विभिन्न निर्देशिकाओं में रखा है और आप चला रहे हैं makeएक अलग निर्देशिका में, फिर हेडर फ़ाइलों का पथ प्रदान करना आवश्यक है। यह मेकफाइल में -I विकल्प का उपयोग करके किया जा सकता है। मान लें कि फ़ंक्शन। H फ़ाइल / home / tutorialspoint / हैडर फ़ोल्डर में उपलब्ध है और बाकी फ़ाइलें / home / tutorialspoint / src / folder में उपलब्ध हैं, तो मेकाइल इस प्रकार लिखा जाएगा -

INCLUDES = -I "/home/tutorialspoint/header"
CC = gcc
LIBS =  -lm
CFLAGS = -g -Wall
OBJ =  main.o factorial.o hello.o

hello: ${OBJ}
   ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
.cpp.o:
   ${CC} ${CFLAGS} ${INCLUDES} -c $<

चर के लिए अधिक पाठ लागू करना

अक्सर यह पहले से परिभाषित एक चर के मूल्य में अधिक पाठ जोड़ने के लिए उपयोगी है। आप इसे = + = ’वाली रेखा के साथ करते हैं, जैसा कि दिखाया गया है -

objects += another.o

यह चर वस्तुओं का मूल्य लेता है, और नीचे दिए गए अनुसार एकल स्थान से पहले, इसमें 'other.o' पाठ जोड़ता है।

objects = main.o hello.o factorial.o
objects += another.o

उपरोक्त कोड ऑब्जेक्ट को `main.o hello.o factorial.o other.o 'पर सेट करता है।

`+ = 'का उपयोग करना समान है:

objects = main.o hello.o factorial.o
objects := $(objects) another.o

मेकफिल में निरंतरता रेखा

यदि आपको अपने Makefile में बहुत बड़ी लाइनें पसंद नहीं हैं, तो आप नीचे दिखाए गए "back" का उपयोग करके अपनी लाइन को तोड़ सकते हैं -

OBJ =  main.o factorial.o \
   hello.o

is equivalent to

OBJ =  main.o factorial.o hello.o

कमांड प्रॉम्प्ट से मेकफाइल चल रहा है

यदि आपने "Makefile" नाम से Makefile तैयार किया है, तो बस Make को कमांड प्रॉम्प्ट पर लिखें और यह Makefile फ़ाइल चलाएगा। लेकिन अगर आपने Makefile को कोई अन्य नाम दिया है, तो निम्न कमांड का उपयोग करें -

make -f your-makefile-name