Makefile में @: (सिंबल कोलन पर) क्या मतलब है?


155

एक Makefile में निम्नलिखित क्या करता है?

rule: $(deps)
    @:

मुझे यह मैनुअल बनाने में नहीं लगता।

जवाबों:


206

इसका अर्थ है "आउटपुट पर इस कमांड को इको न करें।" तो यह नियम कह रहा है "शेल कमांड निष्पादित करें :और आउटपुट को इको न करें।

बेशक शेल कमांड :एक नो-ऑप है, इसलिए यह कह रहा है "कुछ भी नहीं करो, और मत बताओ।"

क्यों?

यहाँ चाल यह है कि आपको दो अलग-अलग वाक्यविन्यासों का अस्पष्ट संयोजन मिला है। मेकअप (1) वाक्य रचना @, जो केवल आदेश प्रतिध्वनित करने के लिए नहीं है के साथ शुरू एक कार्रवाई का उपयोग है। तो एक नियम की तरह

always:
       @echo this always happens

उत्सर्जन नहीं होगा

   echo this always happens
   this always happens

अब, किसी नियम का क्रिया भाग किसी भी शेल कमांड सहित हो सकता है :। बैश मदद के रूप में अच्छी तरह से यह बताते हैं:

$ help :
:: :
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

21
मेरी टाइपिंग का मजाक मत बनाइए, आप किसी दिन बूढ़े हो जाएंगे।
चार्ली मार्टिन

4
यह एक उत्कृष्ट व्याख्या है कि यह क्या करता है, लेकिन क्या आप किसी भी मौके से जानते हैं कि आप एक मेकफाइल में ऐसा क्यों करेंगे?
चार्ल्स कीपैक्स

8
धूमिल नहीं।
चार्ली मार्टिन

2
यह उन मेकफाइल्स में उपयोगी हो सकता है जो बहुत सारे बाहरी कार्यक्रमों को बुलाते हैं, और जहाँ आप इसे अच्छा दिखने के लिए इको का उपयोग करना चाहते हैं, जैसे यह एक
dwcoder

1
@ charles-Keepax यदि आप विशेष रूप से @:(सिर्फ नहीं @) के संदर्भ में पूछ रहे हैं तो @ Guestolio के जवाब के अलावा यह विकास से बचा हुआ स्टब भी हो सकता है। यह पायथन में एक फ़ंक्शन लिखने जैसा है जिसमें केवल शामिल है pass। यह कॉपी / पेस्ट के लिए कोड के स्टबिंग ब्लॉक के लिए उपयोगी हो सकता है लेकिन वे आम तौर पर लंबे समय तक मौजूद नहीं होना चाहिए। जब इस तरह से स्टबिंग फ़ाइल अभी भी संकलित करेगी, तो
लाइनिंग

40

आप ऐसा क्यों कर सकते हैं, इसके बारे में उत्सुक लोगों के लिए, यह उपयोगी है यदि आप कुछ ऐसा करना चाहते हैं, ताकि आप अपने लक्ष्य के लिए "कुछ भी नहीं करें" आउटपुट न करें।

एक उदाहरण यह है कि यदि आपके पास एक टॉनी टारगेट है जिसे आप हमेशा निष्पादित करते हैं, और इसमें आपके पास कमांड में सशर्त का एक गुच्छा है। आप चाहते हैं कि उन स्थितियों के कम से कम कुछ होने की स्थिति में कुछ भी गलत न हो।

उदाहरण के लिए (लिनक्स की स्क्रिप्ट / Makefile.clean से):

__clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files)),)
    +$(call cmd,clean)
endif
ifneq ($(strip $(__clean-dirs)),)
    +$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
    +$(clean-rule)
endif
    @:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.