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