। GNU में सभी नियम फ़ाइल करें?


18

क्या मैं अपनी व्याख्या में गलत हूं कि मुझे मूल रूप से सभी नियम बनाने से पहले सबसे पहले रखना चाहिए:

.PHONY: all of my rules

all:
    echo "Executing all ..."

of:
    echo "Executing of ..."

my:
    echo "Executing my ..."

rules:
    echo "Executing rules ..."

क्या कोई ऐसा मामला है जहां आप इस 'सूत्र' का पालन नहीं करना चाहेंगे?

http://www.gnu.org/software/make/manual/make.html#Phony-Targets

जवाबों:


24

क्लार्क ग्रब की मेफाइल शैली गाइड की सिफारिश करती है कि:

  • सभी फ़ोनी लक्ष्यों को .PHONY के पूर्वापेक्षाएँ बनाकर घोषित किया जाना चाहिए।
  • एक ही स्थान पर सभी फ़ॉनी लक्ष्यों को सूचीबद्ध करने के बजाय लक्ष्य घोषणा से तुरंत पहले .PHONY की शर्त के रूप में प्रत्येक फ़ॉनी लक्ष्य जोड़ें।
  • कोई फ़ाइल लक्ष्य .PHONY के पूर्वापेक्षाएँ नहीं होनी चाहिए।
  • फोनी लक्ष्य फ़ाइल लक्ष्यों के पूर्वापेक्षाएँ नहीं होनी चाहिए।

आपके उदाहरण के लिए, इसका मतलब होगा:

.PHONY: all
all:
    echo "Executing all ..."

.PHONY: of
of:
    echo "Executing of ..."

.PHONY: my
my:
    echo "Executing my ..."

.PHONY: rules
rules:
    echo "Executing rules ..."

एकाधिक PHONYलक्ष्यों की अनुमति है; इस स्टैक ओवरफ्लो प्रश्न को भी देखें: "क्या ग्नू मेफाइल में कई .PHONY लक्ष्य रखना संभव है?"

इसके अलावा, जबकि यह आपके प्रश्न में सीधे उल्लेख नहीं किया गया है, ध्यान रखना चाहिए कि PHONYआपके प्रोजेक्ट में वास्तविक इनपुट या मध्यवर्ती फ़ाइलों के समान नाम के साथ लक्ष्य न हो । उदाहरण के लिए, यदि आपके प्रोजेक्ट में काल्पनिक रूप से एक स्रोत कोड फ़ाइल है जिसका नाम rules(बिना प्रत्यय के) है, तो PHONYलक्ष्य में उस स्ट्रिंग का समावेश अपेक्षित makeव्यवहार को तोड़ सकता है।


1
शैली गाइड पर उत्कृष्ट शेयर। धन्यवाद।
21-12 बजे ताराबाइट

2

मुझे लगता है कि इसका पालन करना एक अच्छा अभ्यास है लेकिन इसे खंडित करना और पूर्ण नियम व्यंजनों के बाद भी टुकड़े रखना मेरे गमेक पर काम करता है (3.81):

उदाहरण के लिए:

#Makefile
all:
   @echo hello world
.PHONY: all

अध्यक्ष एवं प्रबंध निदेशक:

$ touch all
$ make all    #this would be a no-op if all weren't a phoney target
  hello world 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.