2012-01-20 17 views
8

मैं सैकड़ों उपनिर्देशिकाओं में लक्ष्य उत्पन्न करने के लिए एक मेकफ़ाइल का उपयोग करना चाहता हूं। प्रत्येक उपनिर्देशिका इस तरह की दिनांक/समय टिकट है: 20120119_153957, जो निम्न पैटर्न ????????_?????? से मेल खाता है। इस पैटर्न से मेल खाने वाली कोई अन्य उपनिर्देशिका नहीं है।उपनिर्देशिका globbing द्वारा स्वचालित रूप से लक्ष्य बनाने की सूची कैसे उत्पन्न करें?

एक लक्ष्य जिसे मैं उत्पन्न करना चाहता हूं उसे ????????_??????/graph.pdf कहा जाता है। मेरे पास make_graph नामक एक स्क्रिप्ट है जो ग्राफ को उपनिर्देशिका नाम देगी। लेकिन मुझे यकीन नहीं है कि मेकफ़ाइल कैसे लिखना है जो स्वचालित रूप से सभी उपनिर्देशिकाओं को ग्लोब करेगा और इन लक्ष्यों को प्रोग्रामेटिक रूप से उत्पन्न करेगा।

उदाहरण के लिए, कोड SUBDIRS:=????????_?????? सभी उपनिर्देशिकाओं को सही ढंग से ग्लोब करने लगता है। मैं इस नियम के साथ देख सकते हैं:

.PHONY: print 
print: 
     echo $(SUBDIRS) 

हालांकि इस चर काम

TARGETS:=$(SUBDIRS:%=%/graph.pdf) 

मैं क्या उम्मीद और आवंटित बहुत सारे और लक्ष्य के बहुत सारे करने के लिए प्रतीत नहीं होता। इसके बजाय निम्नलिखित नियम सिर्फ एक लक्ष्य प्रिंट करता है।

.PHONY: print 
print: 
     echo $(TARGETS) 

यह बहुत भ्रामक है कि SUBDIRS सही उपनिर्देशिका होना चाहिए है, लेकिन TARGET केवल एक फ़ाइल है।

+0

क्या यह डुप्लिकेट है [बनाने के साथ वाइल्डकार्ड का उपयोग कैसे करें?] (Http://stackoverflow.com/questions/8937430/how-to-use-wildcard-with-make) –

+0

हां यह पूरा सवाल है। मैंने गलती से शीर्षक के साथ आंशिक प्रश्न पोस्ट किया "बनाने के साथ वाइल्डकार्ड का उपयोग कैसे करें?"। मैंने उस दूसरे प्रश्न को बंद करने या हटाने की कोशिश की और लोगों को इस पर निर्देशित किया। आह। –

+0

मैंने पहले से ही उस प्रश्न का उत्तर दिया है। :( –

उत्तर

14

आपके उदाहरण में ग्लोब मिलान खोल द्वारा किया जाता है।

जीएनयू मेक अंतर्निहित wildcard function है, जो आपको इस प्रकार के रूप में उपयोग कर सकते हैं: भी

.PHONY : all 
all : $(SUBDIRS:%=%/graph.pdf) 

%/graph.pdf : # list prerequisites here. 
    # recipe to make '[email protected]' in directory '$(@D)' from '$^'. 

देखें:

SUBDIRS := $(wildcard ????????_??????) 

अब आप लक्ष्यों की सूची का निर्माण करने के लिए इस चर का उपयोग कर सकते हैं: pattern rules, automatic variables

+0

यह बहुत अच्छा काम करता है। धन्यवाद! –

+0

@ नाथनफारिंगटन, आपका स्वागत है! –

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