मेक में, एक include
कथन में वेरिएबल्स के साथ फ़ाइल पथ शामिल हो सकते हैं और माइनस के साथ उपसर्ग होने पर गैर-मौजूद फ़ाइलों को अनदेखा कर दिया जाएगा। उत्पाद कॉन्फ़िगरेशन समतुल्य inherit-product-if-exists
फ़ंक्शन है। स्टारलार्क स्ट्रिंग शाब्दिक द्वारा पहचानी गई फ़ाइलों के साथ load
स्टेटमेंट का उपयोग करता है, और यदि कोई फ़ाइल मौजूद नहीं है, तो स्टारलार्क एक त्रुटि फेंकता है।
इस सीमा के आसपास काम करने के लिए, स्टारलार्क कनवर्टर:
- उन सभी मेकफ़ाइलों को ढूँढता है जो उस पथ से मेल खा सकते हैं जिसमें वेरिएबल शामिल हैं
- उन सभी के लिए स्टारलार्क
load
स्टेटमेंट उत्सर्जित करता है - रनटाइम पर सही को चुनता है
ध्यान दें कि जेनरेट किया गया स्टारलार्क कोड अप्राकृतिक लग सकता है क्योंकि यह सभी मिलान पथों को सूचीबद्ध करता है, भले ही केवल एक को निष्पादित किया जाएगा।
हम include
/ inherit-product
कथनों में परिवर्तनीय संदर्भों को हटाने की अनुशंसा करते हैं।
जब परिवर्तनीय संदर्भों से बचा नहीं जा सकता है, तो परिवर्तनीय भाग को छोटा करने का प्रयास करें। उदाहरण के लिए:
MY_DIR := path/to/$(TARGET_PRODUCT)
include $(MY_DIR)/file.mk
स्रोत ट्री में प्रत्येक file.mk
के लिए load
स्टेटमेंट उत्पन्न करने के लिए कनवर्टर का कारण बनता है, जबकि
include path/to/$(TARGET_PRODUCT)/file.mk
इसे path/to
अंतर्गत file.mk
फ़ाइलों तक सीमित करता है। बेशक, TARGET_PRODUCT
का उपयोग भी हटाना आदर्श होगा।