2012-04-16 7 views
5

कोड:किसी सूची में पुनरावृत्ति करके मेकफ़ाइल में लक्ष्य कैसे उत्पन्न करें?

LIST=0 1 2 3 4 5 
PREFIX=rambo 

# some looping logic to interate over LIST 

अपेक्षित परिणाम:

rambo0: 
    sh rambo_script0.sh 

rambo1: 
    sh rambo_script1.sh 

के बाद से मेरी सूची में 6 तत्व है, 6 लक्ष्यों को उत्पन्न किया जाना चाहिए। भविष्य में, यदि मैं और अधिक लक्ष्य जोड़ना चाहता हूं, तो मैं केवल अपनी सूची को संशोधित करने और कोड के किसी अन्य भाग को छूने में सक्षम होना चाहता हूं।

लूपिंग तर्क कैसे लिखा जाना चाहिए?

उत्तर

9

text-transforming functions का उपयोग करें। patsubst के साथ आप काफी सामान्य परिवर्तन कर सकते हैं। फ़ाइल नाम बनाने के लिए, addsuffix और addprefix दोनों सुविधाजनक हैं।

नियमों के लिए, pattern rules का उपयोग करें।

कुल परिणाम कुछ इस तरह दिख सकता है:

LIST = 0 1 3 4 5 
targets = $(addprefix rambo, $(LIST)) 

all: $(targets) 

$(targets): rambo%: rambo%.sh 
    sh $< 
+0

धन्यवाद, वहाँ एक रास्ता है अपने अंतिम जेनरेट फॉर्म में लक्ष्य देखने के लिए? – Lazer

+0

@ लाज़र मुझे नहीं पता, लेकिन मैं एक विशेषज्ञ से बहुत दूर हूं। '-n' (सूखा रन) विकल्प आपको बता सकता है कि आप क्या चाहते हैं। –

+1

@ लाज़र, '$ (जानकारी लक्ष्य $ (लक्ष्य) हैं)' – Beta

12

आप जीएनयू बनाने का उपयोग कर रहे हैं, तो आप रन-टाइम में मनमाने ढंग से लक्ष्य उत्पन्न कर सकते हैं:

LIST = 0 1 2 3 4 5 
define make-rambo-target 
    rambo$1: 
     sh rambo_script$1.sh 
    all:: rambo$1 
endef 

$(foreach element,$(LIST),$(eval $(call make-rambo-target,$(element)))) 
संबंधित मुद्दे