पुनरावर्ती विस्तार

उत्पाद/बोर्ड कॉन्फ़िगरेशन मेकफ़ाइल में पुनरावर्ती विस्तार का उपयोग न करें। पुनरावर्ती विस्तार मेकफ़ाइल्स में परिवर्तनीय असाइनमेंट के लिए := के बजाय कच्चे = का उपयोग है। इसके कारण वे वेरिएबल जो अन्य वेरिएबल्स के मान पर सेट होते हैं, वे उन अन्य वेरिएबल्स का मूल्यांकन नहीं करते हैं जब तक कि उनका स्वयं मूल्यांकन नहीं किया जाता है। यह ऐसी कार्यक्षमता है जिसका स्टारलार्क समर्थन नहीं करता है।

इसे हटाना काफी हद तक उस विशिष्ट परिदृश्य पर निर्भर करता है कि इसका उपयोग कैसे किया जाता है। अधिकांश समय इसमें वेरिएबल असाइनमेंट को उस स्थान पर ले जाना शामिल होता है जहां उनका उपयोग किया जाता है। उदाहरण के लिए, प्रतिस्थापित करें:

MY_VAR_2 = foo
# Some stuff in between...
MY_VAR = $(MY_VAR_2)
MY_VAR_2 = bar
# $(MY_VAR) is bar here.

साथ:

MY_VAR_2 := foo
# Some stuff in between...
MY_VAR_2 := bar
MY_VAR := $(MY_VAR_2)
# $(MY_VAR) is bar here.

यदि उस चर को पहले सरल विस्तार के साथ निर्दिष्ट नहीं किया गया है तो += के साथ एक चर में जोड़ना पुनरावर्ती विस्तार का उपयोग करता है। यदि आप सुनिश्चित नहीं हैं कि वेरिएबल पहले असाइन किया गया है, तो += MY_VAR := $(strip $(MY_VAR) new_value) से बदला जा सकता है।

स्थगित विस्तार को हटाने से स्टारलार्क में रूपांतरण होने से पहले ही मेकफाइल्स के मूल्यांकन में भी तेजी आ सकती है। यदि महंगे फ़ंक्शन कॉल के परिणाम के लिए वेरिएबल सेट किए गए थे, तो फ़ंक्शन को केवल एक बार साधारण विस्तार के साथ लेकिन संभावित रूप से पुनरावर्ती विस्तार के साथ कई बार कॉल किया जाएगा।