2010-10-06 11 views
16

जब मैं मेकफ़ाइल बदलता हूं, तो उसके नियम बदल सकते हैं, इसलिए उन्हें पुनर्मूल्यांकन किया जाना चाहिए, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है।सभी नियम मेकफ़ाइल पर निर्भर करते हैं

क्या मेकफ़ाइल में कहने का कोई तरीका है कि उसके सभी लक्ष्य, चाहे कोई भी मेकफ़ाइल पर निर्भर न हो? (इसके नाम के बावजूद।)

मैं जीएनयू बनाने का उपयोग कर रहा हूं।

उत्तर

12

यह एक और सरल, उपयोगी, तार्किक चीज़ जैसा दिखता है जो बनाना चाहिए, लेकिन नहीं है।

यहां एक कामकाज है। यदि clean नियम सही तरीके से स्थापित किया गया है, तो जब भी मेकरफ़ाइल बदल दिया गया हो, तो इसे एक निष्कर्ष के रूप में खाली dummy फ़ाइल का उपयोग करके निष्पादित कर सकते हैं।

-include dummy 

dummy: Makefile 
    @touch [email protected] 
    @$(MAKE) -s clean 

यह सबसे लक्ष्यों के लिए काम करेंगे, कि लक्ष्य है कि वास्तविक फ़ाइलें कर रहे हैं और कि स्वच्छ द्वारा हटा दिया जाता है, और किसी भी लक्ष्य है कि उन पर निर्भर है। साइड-इफेक्ट लक्ष्य और कुछ PHONY लक्ष्य नेट के माध्यम से फिसल जाएंगे।

+0

अच्छी चाल, लेकिन अगर मैं अपनी सभी निर्भरताओं को पुनर्निर्मित करना चाहता हूं (जो कि मेरे वर्तमान प्रोजेक्ट में लगभग 30 मिनट लेता है) तो मैं खुद को 'साफ' कर दूंगा। – reinierpost

+0

इससे संबंधित प्रश्न उठता है: 'क्लीन बनाने' के लिए स्वचालित रूप से नियम कैसे उत्पन्न करें? मेरे वर्तमान मेकफ़ाइल में कोई नहीं है। – reinierpost

+9

@reinierpost: एक मिनट प्रतीक्षा करें। मेकफ़ाइल बदल दिया गया है, तो क्या आप सभी निर्भरताओं को पुनर्निर्मित नहीं करना चाहते हैं? क्या आप नहीं चाहते हैं कि वे सभी मेकफ़ाइल पर निर्भर हों? क्या वह पूरा मुद्दा नहीं था? – Beta

1

एकमात्र उत्तर मुझे यह पता है कि निर्भरता को स्पष्ट रूप से मेकफ़ाइल जोड़ना है। उदाहरण के लिए, %.o: %.c makefile $(CC) $(CFLAGS) -c $<

+1

संबंधित [निहित नियम] से मेल खाने के लिए नियम में '$ (CPPFLAGS) 'जोड़ने का अच्छा विचार (https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html# सूची के- नियम) – juanchopanza

संबंधित मुद्दे