एक्सटेंशन ओवरव्यू

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

इस पेज में मैक्रो का इस्तेमाल करके, बिल्ड भाषा को बढ़ाने का तरीका बताया गया है और नियमों को ध्यान में रखकर बनाया गया है.

बेज़ेल एक्सटेंशन ऐसी फ़ाइलें हैं जिनके आखिरी चार अंक .bzl हैं. किसी load स्टेटमेंट का इस्तेमाल करें.

ज़्यादा बेहतर कॉन्सेप्ट सीखने से पहले:

मैक्रो और नियम

मैक्रो वह फ़ंक्शन है जो नियमों को इंस्टैंशिएट करता है. यह तब फ़ायदेमंद होता है, जब BUILD फ़ाइल बहुत बार दोहराई जा रही है या बहुत जटिल हो रही है, क्योंकि यह उसे फिर से इस्तेमाल करने की अनुमति देती है कुछ कोड. BUILD फ़ाइल के पढ़े जाते ही, फ़ंक्शन का आकलन हो जाता है. इस तारीख के बाद BUILD फ़ाइल का मूल्यांकन करते समय, Basel के पास मैक्रो के बारे में कम जानकारी होती है: अगर आपका मैक्रो genrule जनरेट करता है, तो बेज़ल इस तरह से काम करेंगे, जैसे कि आपने genrule. इस वजह से, bazel query सिर्फ़ जनरेट किए गए genrule को ही सूची में शामिल करेगा.

मैक्रो से ज़्यादा असरदार नियम होता है. यह Basel को ऐक्सेस कर सकता है और उस पर पूरा कंट्रोल होता है. उदाहरण के लिए, यह पास जानकारी देना चाहते हैं.

अगर आपको आसान लॉजिक का फिर से इस्तेमाल करना है, तो मैक्रो से शुरुआत करें. अगर कोई मैक्रो जटिल, आमतौर पर इसे नियम बना देना बेहतर होता है. नई भाषा के लिए सहायता आम तौर पर, एक नियम के साथ किया जाता है. नियम सिर्फ़ ऐडवांस सेटिंग वाले उपयोगकर्ताओं के लिए हैं और ज़्यादातर उपयोगकर्ताओं को इसे कभी नहीं लिखना होगा; तो वे केवल मौजूदा क्वेरी को लोड करेंगे और नियम.

इवैलुएशन मॉडल

बिल्ड के तीन चरण होते हैं.

  • लोडिंग का चरण. सबसे पहले, सभी एक्सटेंशन और सभी BUILD को लोड करें और उनका मूल्यांकन करें जिन फ़ाइलों की ज़रूरत पड़ती है. सिर्फ़ BUILD फ़ाइलों का इस्तेमाल करना नियमों को इंस्टैंशिएट करता है (जब भी किसी नियम को कॉल किया जाता है, तो वह ग्राफ़ में जुड़ जाता है). यहां मैक्रो का आकलन किया जाता है.

  • विश्लेषण का चरण. नियमों का कोड लागू किया गया (उनके implementation फ़ंक्शन), और कार्रवाइयां इंस्टैंशिएट होती हैं. कार्रवाई में, जनरेट करने का तरीका बताया गया है इनपुट के सेट से आउटपुट का एक सेट, जैसे "hello.c पर gcc चलाएं और get हैलो.ओ". आपको साफ़ तौर पर बताना होगा कि कौन-कौनसी फ़ाइलें पहले जनरेट की जाएंगी लागू करने के लिए कहा जाता है. दूसरे शब्दों में, विश्लेषण के चरण में एक ग्राफ़, जो लोड होने के चरण से जनरेट होता है और एक ऐक्शन ग्राफ़ जनरेट करता है.

  • लागू होने का चरण. कार्रवाइयों को तब लागू किया जाता है, जब उनका कम से कम एक आउटपुट आवश्यक. अगर कोई फ़ाइल मौजूद नहीं है या कोई निर्देश एक आउटपुट जनरेट नहीं कर पाता है, तो बिल्ड विफल रहता है. इस चरण के दौरान टेस्ट भी किए जाते हैं.

Basel ने .bzl फ़ाइलों और BUILD को पढ़ने, पार्स करने, और उनका आकलन करने के लिए, समानता का इस्तेमाल किया फ़ाइलें शामिल हैं. किसी फ़ाइल को हर बिल्ड के लिए ज़्यादा से ज़्यादा एक बार पढ़ा जाता है और आकलन का नतीजा यह होता है कैश मेमोरी में सेव किया जाता है और फिर से इस्तेमाल किया जाता है. सभी डिपेंडेंसी (load()) के लिए फ़ाइल का आकलन सिर्फ़ एक बार किया जाता है स्टेटमेंट) हल हो गए हैं. डिज़ाइन के हिसाब से, .bzl फ़ाइल लोड होने पर, वह फ़ाइल नहीं दिखती असर होता है, यह सिर्फ़ वैल्यू और फ़ंक्शन के बारे में बताता है.

बेज़ल समझदारी से काम करने की कोशिश करता है: यह डिपेंडेंसी विश्लेषण का इस्तेमाल करके यह पता लगाता है कि कौनसी फ़ाइलों को लोड किया जाना चाहिए, कौनसे नियमों का विश्लेषण किया जाना चाहिए, और कौनसी कार्रवाइयां की जानी चाहिए. इसके लिए उदाहरण के लिए, अगर कोई नियम ऐसी कार्रवाइयां जनरेट करता है जिनकी आपको मौजूदा बिल्ड के लिए ज़रूरत नहीं है, उन्हें एक्ज़ीक्यूट नहीं किया जाएगा.

एक्सटेंशन बनाना

अपने खुद के एक्सटेंशन लिखते समय नीचे दिए गए दो लिंक बहुत उपयोगी होंगे. नहीं पहुंच सकते हैं:

आगे बढ़ते रहें

मैक्रो और नियम के अलावा, हो सकता है कि आप अस्पेक्ट और डेटा स्टोर करने के तरीके के नियम.