makefile
.PHONY लक्ष्य
खोज…
गैर-फाइल लक्ष्यों के लिए .PHONY का उपयोग करना
उन .PHONY
को निर्दिष्ट करने के लिए .PHONY
का उपयोग करें, जो फाइलें नहीं हैं, जैसे, clean
या mrproper
।
अच्छा उदाहरण
.PHONY: clean
clean:
rm *.o temp
खराब उदाहरण
clean:
rm *.o temp
अच्छा उदाहरण में make
जानता है कि clean
एक फ़ाइल नहीं है, अगर यह अप टू डेट है या नहीं और नुस्खा निष्पादित करेंगे इसलिए यह खोज नहीं होंगे।
खराब उदाहरण में make
clean
नामक एक फाइल की तलाश करेगा। यदि यह मौजूद नहीं है या यह अप टू डेट नहीं है तो यह रेसिपी को निष्पादित करेगा, लेकिन यदि यह मौजूद है और यह अप टू डेट है तो रेसिपी निष्पादित नहीं की जाएगी।
Command मेक ’कमांड के पुनरावर्ती चालान के लिए .PHONY का उपयोग करना
मेक का पुनः उपयोग एक मेकफाइल के रूप में मेक का उपयोग करने का अर्थ है। यह तकनीक तब उपयोगी होती है जब एक बड़ी परियोजना में उप-निर्देशिकाएं होती हैं, जिनमें से प्रत्येक में उनके संबंधित मेकअप होते हैं। निम्नलिखित उदाहरण को पुनरावर्ती बनाने के साथ .PHONY का उपयोग करने के लाभ को समझने में मदद मिलेगी।
/main
|_ Makefile
|_ /foo
|_ Makefile
|_ ... // other files
|_ /bar
|_ Makefile
|_ ... // other files
|_ /koo
|_ Makefile
|_ ... // other files
मुख्य के मेकफाइल के भीतर से उप-निर्देशिका के मेफाइल को चलाने के लिए, मुख्य मेकफाइल को नीचे दिखाया गया है जैसा कि नीचे दिखाया गया है (ऐसे अन्य तरीके हैं जिनसे इसे प्राप्त किया जा सकता है, लेकिन यह वर्तमान विषय के दायरे से बाहर है)
SUBDIRS = foo bar koo
subdirs:
for dir in $(SUBDIRS); do \
$(MAKE) -C $$dir; \
done
हालांकि, इस विधि के साथ नुकसान हैं।
- एक उप-मेक में पाई गई किसी भी त्रुटि को इस नियम द्वारा अनदेखा किया जाता है, इसलिए यह बाकी निर्देशिकाओं का निर्माण जारी रखेगी, जबकि कोई भी विफल रहता है।
- केवल एक नियम का उपयोग करने के बाद से कई बिल्ड लक्ष्यों के समानांतर निष्पादन करने की क्षमता का उपयोग नहीं किया जाता है।
उप-निर्देशिकाओं को .PHONY लक्ष्यों के रूप में घोषित करके (आपको इसे उप-निर्देशिका के रूप में अवश्य करना चाहिए क्योंकि यह हमेशा मौजूद होता है, अन्यथा इसे बनाया नहीं जाएगा) इन समस्याओं को दूर किया जा सकता है।
SUBDIRS = foo bar koo
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
$(MAKE) -C $@