एक्सटेंशन की खास जानकारी

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
किसी समस्या की शिकायत करें स्रोत देखें

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

Bazel एक्सटेंशन ऐसी फ़ाइलें हैं जिनके आखिर में .bzl आता है. किसी एक्सटेंशन से चिह्न इंपोर्ट करने के लिए, लोड स्टेटमेंट का इस्तेमाल करें.

ज़्यादा बेहतर सिद्धांत जानने से पहले:

  • BUILD के साथ-साथ, .bzl फ़ाइलों में इस्तेमाल की जाने वाली Starlark भाषा के बारे में पढ़ें.

  • जानें कि आप दो BUILD फ़ाइलों के बीच वैरिएबल शेयर कैसे कर सकते हैं.

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

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

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

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

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

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

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

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

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

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

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

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

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

आगे बढ़ें

मैक्रो और नियमों के साथ-साथ, आप अहम और डेटा स्टोर करने के नियमों के बारे में भी लिख सकते हैं.