2013-06-24 7 views
6

मैं वर्तमान में एक प्रोजेक्ट पर काम कर रहा हूं जिसके लिए संसाधनों के बारे में जानकारी संग्रहीत करने के लिए किसी निर्देशिका में फ़ाइलों की सूची को C++ शीर्षलेख में अनुवाद करना आवश्यक है। उदाहरण के लिए:रिकर्सिव निर्भरता बनाएं

/ 
update.py 
resources.h 
Makefile 
/resources 
    resource1.png 
    /sub1 
    /sub2 
     resource2.png 

क्या मैं चाहता हूँ केवल जब निर्देशिका ट्री में कहीं संसाधनों में से एक बदल गया है Makefile update.py को चलाने के लिए है। संसाधनों को छूने के लिए कोई अन्य मेकफ़ाइल नहीं जा रहे हैं, केवल संसाधन.h। मुझे ऐसा करने की क्या ज़रूरत है?

पीएस जो मैंने पढ़ा है, उससे मेहनत से खोज करना एक बुरा विचार है, लेकिन यदि कोई और फ़ाइल एक ही फाइल को छू रहा है, तो क्या यह एक समस्या होगी?

उत्तर

12

मुझे यकीन है कि तुम क्या पढ़ा है नहीं कर रहा हूँ, लेकिन वहाँ मेकअप में इस तरह एक नियम के लेखन कोई समस्या नहीं है:

RESOURCES := $(shell find . -name resource\*.png -print) 
resources.h: update.py $(RESOURCES) 
     ./update.py $(RESOURCES) 

या जो कुछ भी।

+0

यह विफल रहता है अगर इसमें एक स्थान के साथ फ़ाइल मिलती है। शायद एक छोटे से चिमटा की जरूरत है। – HectorJ

+0

सामान्य रूप से, बनाने के मौजूदा संस्करणों का उपयोग करके व्हाइटस्पेस युक्त फ़ाइल नामों को प्रबंधित करना संभव नहीं है। – MadScientist

1

मुझे लगता है कि आपको यह गलत लगता है: Recursive Make Considered Harmful बताता है कि आपको किसी एक को दूसरे के भीतर से कॉल नहीं करना चाहिए, क्योंकि न तो निर्भरताओं का पूरा अवलोकन होगा। यह जल्दी या बाद में गलत बनाता है जो आप केवल make clean के साथ सॉर्ट कर सकते हैं।

makepp एक विकल्प है जो आपको उस संकट से बचने में मदद करता है। यह भी एक पुनरावर्ती (कुछ भी नहीं ऊपर प्रत्यावर्तन के साथ क्या करना) के साथ आपकी समस्या नहीं सुलझती वाइल्डकार्ड:

RESOURCES := **/resource\*.png 
resources.h: $(RESOURCES) 
    .$/update.py $(inputs) 

यह भी काम करता है अगर फ़ाइलें नहीं अभी तक, क्योंकि makepp के वाइल्डकार्ड को ध्यान में रखना है कि आपके नियमों के अनुसार बनाया जा सकता है कर रहे हैं । ध्यान दें कि यह प्रोग्राम निर्भरता को स्वचालित रूप से कैसे नोटिस करता है। अजीब $/ किसी भी तरीके से दुबला होगा जिस पर यह चल रहा है, इसलिए यह अधिक पोर्टेबल है।

मेकप के लिए और भी कुछ है। लगभग सभी जीएनयू बनाने के अलावा, बहुत अधिक उपयोगी चीजें हैं, और आप कुछ पर्ल प्रोग्रामिंग के साथ अपनी मेकफ़ाइल भी बढ़ा सकते हैं।

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