इस पेज में मैक्रो का इस्तेमाल करके, बिल्ड भाषा को बढ़ाने का तरीका बताया गया है और नियमों को ध्यान में रखकर बनाया गया है.
बेज़ेल एक्सटेंशन ऐसी फ़ाइलें हैं जिनके आखिरी चार अंक .bzl
हैं. किसी
load स्टेटमेंट का इस्तेमाल करें.
ज़्यादा बेहतर कॉन्सेप्ट सीखने से पहले:
स्टारलार्क भाषा के बारे में पढ़ें, जिसका इस्तेमाल दोनों भाषाओं में किया गया है
BUILD
और.bzl
फ़ाइलें.वैरिएबल शेयर करने का तरीका जानें दो
BUILD
फ़ाइलों के बीच.
मैक्रो और नियम
मैक्रो वह फ़ंक्शन है जो नियमों को इंस्टैंशिएट करता है. यह तब फ़ायदेमंद होता है, जब
BUILD
फ़ाइल बहुत बार दोहराई जा रही है या बहुत जटिल हो रही है, क्योंकि यह उसे फिर से इस्तेमाल करने की अनुमति देती है
कुछ कोड. BUILD
फ़ाइल के पढ़े जाते ही, फ़ंक्शन का आकलन हो जाता है. इस तारीख के बाद
BUILD
फ़ाइल का मूल्यांकन करते समय, Basel के पास मैक्रो के बारे में कम जानकारी होती है:
अगर आपका मैक्रो genrule
जनरेट करता है, तो बेज़ल इस तरह से काम करेंगे, जैसे कि आपने
genrule
. इस वजह से, bazel query
सिर्फ़ जनरेट किए गए genrule
को ही सूची में शामिल करेगा.
मैक्रो से ज़्यादा असरदार नियम होता है. यह Basel को ऐक्सेस कर सकता है और उस पर पूरा कंट्रोल होता है. उदाहरण के लिए, यह पास जानकारी देना चाहते हैं.
अगर आपको आसान लॉजिक का फिर से इस्तेमाल करना है, तो मैक्रो से शुरुआत करें. अगर कोई मैक्रो जटिल, आमतौर पर इसे नियम बना देना बेहतर होता है. नई भाषा के लिए सहायता आम तौर पर, एक नियम के साथ किया जाता है. नियम सिर्फ़ ऐडवांस सेटिंग वाले उपयोगकर्ताओं के लिए हैं और ज़्यादातर उपयोगकर्ताओं को इसे कभी नहीं लिखना होगा; तो वे केवल मौजूदा क्वेरी को लोड करेंगे और नियम.
इवैलुएशन मॉडल
बिल्ड के तीन चरण होते हैं.
लोडिंग का चरण. सबसे पहले, सभी एक्सटेंशन और सभी
BUILD
को लोड करें और उनका मूल्यांकन करें जिन फ़ाइलों की ज़रूरत पड़ती है. सिर्फ़BUILD
फ़ाइलों का इस्तेमाल करना नियमों को इंस्टैंशिएट करता है (जब भी किसी नियम को कॉल किया जाता है, तो वह ग्राफ़ में जुड़ जाता है). यहां मैक्रो का आकलन किया जाता है.विश्लेषण का चरण. नियमों का कोड लागू किया गया (उनके
implementation
फ़ंक्शन), और कार्रवाइयां इंस्टैंशिएट होती हैं. कार्रवाई में, जनरेट करने का तरीका बताया गया है इनपुट के सेट से आउटपुट का एक सेट, जैसे "hello.c पर gcc चलाएं और get हैलो.ओ". आपको साफ़ तौर पर बताना होगा कि कौन-कौनसी फ़ाइलें पहले जनरेट की जाएंगी लागू करने के लिए कहा जाता है. दूसरे शब्दों में, विश्लेषण के चरण में एक ग्राफ़, जो लोड होने के चरण से जनरेट होता है और एक ऐक्शन ग्राफ़ जनरेट करता है.लागू होने का चरण. कार्रवाइयों को तब लागू किया जाता है, जब उनका कम से कम एक आउटपुट आवश्यक. अगर कोई फ़ाइल मौजूद नहीं है या कोई निर्देश एक आउटपुट जनरेट नहीं कर पाता है, तो बिल्ड विफल रहता है. इस चरण के दौरान टेस्ट भी किए जाते हैं.
Basel ने .bzl
फ़ाइलों और BUILD
को पढ़ने, पार्स करने, और उनका आकलन करने के लिए, समानता का इस्तेमाल किया
फ़ाइलें शामिल हैं. किसी फ़ाइल को हर बिल्ड के लिए ज़्यादा से ज़्यादा एक बार पढ़ा जाता है और आकलन का नतीजा यह होता है
कैश मेमोरी में सेव किया जाता है और फिर से इस्तेमाल किया जाता है. सभी डिपेंडेंसी (load()
) के लिए फ़ाइल का आकलन सिर्फ़ एक बार किया जाता है
स्टेटमेंट) हल हो गए हैं. डिज़ाइन के हिसाब से, .bzl
फ़ाइल लोड होने पर, वह फ़ाइल नहीं दिखती
असर होता है, यह सिर्फ़ वैल्यू और फ़ंक्शन के बारे में बताता है.
बेज़ल समझदारी से काम करने की कोशिश करता है: यह डिपेंडेंसी विश्लेषण का इस्तेमाल करके यह पता लगाता है कि कौनसी फ़ाइलों को लोड किया जाना चाहिए, कौनसे नियमों का विश्लेषण किया जाना चाहिए, और कौनसी कार्रवाइयां की जानी चाहिए. इसके लिए उदाहरण के लिए, अगर कोई नियम ऐसी कार्रवाइयां जनरेट करता है जिनकी आपको मौजूदा बिल्ड के लिए ज़रूरत नहीं है, उन्हें एक्ज़ीक्यूट नहीं किया जाएगा.
एक्सटेंशन बनाना
अपना पहला मैक्रो बनाएं. कुछ कोड का फिर से इस्तेमाल करते हैं. इसके बाद मैक्रो के बारे में ज़्यादा जानें और का इस्तेमाल करके "कस्टम वर्ब" बनाना.
नियमों का इस्तेमाल शुरू करने के लिए, नियमों के ट्यूटोरियल में दिए गए निर्देशों का पालन करें. इसके बाद, नियमों के कॉन्सेप्ट के बारे में ज़्यादा जानकारी हासिल की जा सकती है.
अपने खुद के एक्सटेंशन लिखते समय नीचे दिए गए दो लिंक बहुत उपयोगी होंगे. नहीं पहुंच सकते हैं:
आगे बढ़ते रहें
मैक्रो और नियम के अलावा, हो सकता है कि आप अस्पेक्ट और डेटा स्टोर करने के तरीके के नियम.
Buildifier का इस्तेमाल करना ताकि आपके कोड को फ़ॉर्मैट और लिंट किया जा सके.
.bzl
की स्टाइल गाइड का पालन करें.अपने कोड की जांच करें.
अपने उपयोगकर्ताओं की मदद करने के लिए, दस्तावेज़ जनरेट करें.
अपने कोड की परफ़ॉर्मेंस ऑप्टिमाइज़ करें.
अपने एक्सटेंशन को दूसरे लोगों के लिए इस्तेमाल करें.