व्हाइटस्पेस से अलग फ़ाइल नामों की सूची में एक्सटेंशन को एक सामान्य आवश्यकता है, और इसके लिए अंतर्निहित सुविधाएं हैं। आप सूची में हर नाम के अंत में एक x
जोड़ना चाहते हैं:
FILES_OUT = $(FILES_IN:=x)
सामान्य रूप $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
है। यह VARIABLE
का मान लेता है और प्रत्येक शब्द के अंत में OLD_SUFFIX
को प्रतिस्थापित करता है जो इस प्रत्यय के साथ समाप्त होता है NEW_SUFFIX
(गैर मिलान वाले शब्द अपरिवर्तित छोड़ दिए जाते हैं)। जीएनयू इस सुविधा को कॉल करता है (जो प्रत्येक मेक कार्यान्वयन में मौजूद है) substitution references।
तुम सिर्फ इस सुविधा का उपयोग .xlsx
में .docx
और .xls
में .doc
बदलना चाहते हैं, तो आप एक मध्यवर्ती चर का उपयोग करने की आवश्यकता है।
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
आप थोड़ा अधिक सामान्य वाक्यविन्यास $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
का भी उपयोग कर सकते हैं। यह सुविधा जीएनयू बनाने के लिए अद्वितीय नहीं है, लेकिन यह सादे प्रत्यय-बदलती प्रतिस्थापन के रूप में पोर्टेबल नहीं है।
एक जीएनयू बनाने की सुविधा भी है जो आपको एक ही पंक्ति पर एकाधिक प्रतिस्थापन श्रृंखला प्रदान करने देती है: patsubst
function।
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
या बस 'FILES_OUT: = $ (patsubst%,% x, $ (FILES_IN)) 'यदि नियम वास्तव में सामान्य हो सकता है। – tripleee
@Gilles इस सहायक उत्तर के लिए धन्यवाद! – TheFrancisOne
इस ऑपरेटर का नाम क्या है? मैं मैनुअल की जांच करना चाहता हूं, लेकिन उचित नाम नहीं ढूंढ सकता। – rkioji