खोज…


गैर-फाइल लक्ष्यों के लिए .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

हालांकि, इस विधि के साथ नुकसान हैं।

  1. एक उप-मेक में पाई गई किसी भी त्रुटि को इस नियम द्वारा अनदेखा किया जाता है, इसलिए यह बाकी निर्देशिकाओं का निर्माण जारी रखेगी, जबकि कोई भी विफल रहता है।
  2. केवल एक नियम का उपयोग करने के बाद से कई बिल्ड लक्ष्यों के समानांतर निष्पादन करने की क्षमता का उपयोग नहीं किया जाता है।

उप-निर्देशिकाओं को .PHONY लक्ष्यों के रूप में घोषित करके (आपको इसे उप-निर्देशिका के रूप में अवश्य करना चाहिए क्योंकि यह हमेशा मौजूद होता है, अन्यथा इसे बनाया नहीं जाएगा) इन समस्याओं को दूर किया जा सकता है।

SUBDIRS = foo bar koo

.PHONY: subdirs $(SUBDIRS)

subdirs: $(SUBDIRS)

$(SUBDIRS):
        $(MAKE) -C $@


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow