2012-01-25 9 views
8

मौजूद है वहाँ किसी भी तरह से मैं केवल एक फ़ाइल की जाली निर्भरता निष्पादित कर सकते हैं अगर यह फ़ाइल मौजूद नहीं है है?Makefile एक फ़ाइल के phonytargets पर अमल तभी जब फ़ाइल नहीं

यह काम करता है फ़ाइल कोई जाली निर्भरता है और केवल इस नियम की सामग्री निष्पादित करता है। लेकिन अगर मैं निर्भरता के रूप में एक पैसा लक्ष्य जोड़ता हूं तो यह निर्भरता नियम और मौजूदा फ़ाइल उत्पन्न करने के नियम को निष्पादित करता रहता है।

मैं अपने Makefile सरलीकृत ताकि आप मेरी समस्या देख सकते हैं:


.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the heck is wrong with you 

उत्तर

7

उपयोग order-only prerequisites:

कभी कभी, हालांकि, आप एक स्थिति है जहाँ आप नियमों पर एक विशेष आदेश लागू करने के लिए करना चाहते हैं यदि उन नियमों में से एक को निष्पादित किया गया है तो लक्ष्य को अद्यतन करने के लिए मजबूर किए बिना बुलाया जाएगा। उस स्थिति में, आप ऑर्डर-केवल पूर्वापेक्षाएँ परिभाषित करना चाहते हैं। ऑर्डर-केवल पूर्वापेक्षाएँ पूर्वापेक्षाएँ सूची में पाइप प्रतीक (|) रखकर निर्दिष्ट की जा सकती हैं: पाइप प्रतीक के बाईं ओर की कोई भी पूर्व शर्त सामान्य है; दाईं ओर की कोई भी शर्त ऑर्डर-केवल हैं:

targets : normal-prerequisites | order-only-prerequisites 

सामान्य पूर्वापेक्षाएँ अनुभाग निश्चित रूप से खाली हो सकता है। इसके अलावा, आप अभी भी एक ही लक्ष्य के लिए आवश्यक शर्तें के कई लाइनों की घोषणा कर सकते हैं: वे उचित रूप से जोड़ दिए जाते हैं (सामान्य आवश्यक शर्तें सामान्य आवश्यक शर्तें की सूची में जोड़ दिए जाते हैं; आदेश केवल आवश्यक शर्तें आदेश केवल-आवश्यक शर्तें की सूची के साथ जोड़ दिया जाता है)।

.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: | phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the hack is wrong with you 
संबंधित मुद्दे