2012-09-21 9 views
5

अगर मैं n आदेशों की एक सूची है, = c1 ... cn, मैं कैसे किसी दिए गए लक्ष्य के क्रम में उन्हें निष्पादित कर सकते हैं? मैं foreachमैं सूची में प्रत्येक कमांड को कैसे निष्पादित करूं?

$(foreach x,$(c),./$(x)) 

का निर्माण करने की कोशिश की लेकिन वह एक पंक्ति में सभी आदेशों डालता है। कोई सुराग?

+1

लगता है जैसे आप मेक से अधिक के लिए बैश चाहते हैं। – Flexo

उत्तर

8

आप समस्या की पहचान (“ लेकिन यह है कि एक पंक्ति ” पर सभी आदेशों डालता है)। जब भी आप अपने लूप में $x का विस्तार करते हैं तो आपको केवल एक नई लाइन जोड़ना होगा।

define \n 


endef 

अब बस अपने नुस्खा में $(foreach x,$c,./$(x)${\n}) का उपयोग करें।

+0

ठीक है, धन्यवाद bobbogo! –

5

तो सफलता के लिए जाँच करने के लिए कोई जरूरत नहीं है, तो जोड़ने अर्धविराम काम करना चाहिए:

$(foreach x,$c,./$(x);) 

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

define execute-command 
$(1) 

endef 

execute-list: 
     $(foreach x,$(c),$(call execute-command,./$(x))) 
+1

आपको एक टैब के साथ प्रत्येक पंक्ति के विस्तार को उपसर्ग करने की आवश्यकता नहीं है। _Make_ यह समझता है कि प्रत्येक पंक्ति पहले से ही टैब के कारण नुस्खा में एक नए कमांड का प्रतिनिधित्व करती है। – bobbogo

+0

@bobbogo - अच्छा, धन्यवाद। आपके सुझाव के उत्तर को सरलीकृत किया। – FooF

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

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