अक्सर पूछे जाने वाले प्रश्न

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

यहां लिखने के लिए इस्तेमाल होने वाले एक्सटेंशन से जुड़ी कुछ सामान्य समस्याएं और सवाल दिए गए हैं.

मेरी फ़ाइल क्यों नहीं बनाई गई / मेरी कार्रवाई कभी लागू क्यों नहीं हुई?

Bazel सिर्फ़ उन कार्रवाइयों को पूरा करता है जो मांगी गई आउटपुट फ़ाइलों को बनाने के लिए ज़रूरी हैं.

  • अगर आपको जिस फ़ाइल का ऐक्सेस चाहिए उस पर कोई लेबल है, तो सीधे उस फ़ाइल का ऐक्सेस पाने का अनुरोध किया जा सकता है: bazel build //pkg:myfile.txt

  • अगर फ़ाइल टारगेट के किसी आउटपुट ग्रुप में है, तो आपको कमांड लाइन पर उस आउटपुट ग्रुप की जानकारी देनी पड़ सकती है: bazel build //pkg:mytarget --output_groups=foo

  • अगर आपको कमांड लाइन पर टारगेट के ज़िक्र होने पर, फ़ाइल अपने-आप बनने की सुविधा चाहिए, तो DefaultInfo प्रोवाइडर को दिखाकर, उसे अपने नियम के डिफ़ॉल्ट आउटपुट में जोड़ें.

ज़्यादा जानकारी के लिए, नियमों का पेज देखें.

लागू करने का मेरा फ़ंक्शन क्यों लागू नहीं हो रहा है?

Bazel सिर्फ़ उन टारगेट का विश्लेषण करता है जिनके लिए बिल्ड का अनुरोध किया गया है. आपको कमांड लाइन पर टारगेट का नाम देना चाहिए या ऐसा कुछ देना चाहिए जो टारगेट पर निर्भर करता हो.

मेरी कार्रवाई या बाइनरी को लागू करने पर, कोई फ़ाइल मौजूद नहीं है

पक्का करें कि 1) फ़ाइल को कार्रवाई या बाइनरी के इनपुट के तौर पर रजिस्टर किया गया हो और 2) जिस स्क्रिप्ट या टूल को चलाया जा रहा है वह सही पाथ का इस्तेमाल करके फ़ाइल को ऐक्सेस कर रहा हो.

कार्रवाइयों के लिए, इनपुट का एलान करके उन्हें ctx.actions.* फ़ंक्शन में भेजा जाता है, जो कार्रवाई बनाता है. File.path का इस्तेमाल करके, फ़ाइल का सही पाथ पाया जा सकता है.

बाइनरी (bazel run या bazel test कमांड से चलाए जाने वाले, रन किए जा सकने वाले आउटपुट) के लिए, इनपुट को runfiles में शामिल करके एलान किया जाता है. path फ़ील्ड के बजाय, File.short_path का इस्तेमाल करें. यह फ़ाइल का पाथ होता है, जो उस रनफ़ाइल डायरेक्ट्री के हिसाब से होता है जिसमें बाइनरी फ़ाइल चलती है.

मैं यह कैसे कंट्रोल करूं कि bazel build //pkg:mytarget कौनसी फ़ाइलें बनाए?

डिफ़ॉल्ट आउटपुट सेट करने के लिए, DefaultInfo प्रोवाइडर का इस्तेमाल करें.

मैं अपने बिल्ड के हिस्से के तौर पर, कोई प्रोग्राम कैसे चलाऊं या फ़ाइल I/O कैसे करूं?

किसी टूल को टारगेट के तौर पर घोषित किया जा सकता है, ठीक वैसे ही जैसे आपके बिल्ड के किसी भी दूसरे हिस्से को. साथ ही, अन्य टारगेट बनाने में मदद करने के लिए, उसे लागू करने के दौरान चलाया जा सकता है. किसी टूल को चलाने वाली कार्रवाई बनाने के लिए, ctx.actions.run का इस्तेमाल करें और टूल को executable पैरामीटर के तौर पर पास करें.

लोड करने और विश्लेषण करने के दौरान, कोई टूल नहीं चल सकता. साथ ही, फ़ाइल I/O भी नहीं किया जा सकता. इसका मतलब है कि टूल और फ़ाइल के कॉन्टेंट (BUILD और .bzl फ़ाइलों के कॉन्टेंट को छोड़कर) से, टारगेट और ऐक्शन ग्राफ़ बनाने के तरीके पर कोई असर नहीं पड़ता.

अगर मुझे एक ही स्ट्रक्चर्ड डेटा को, एक्सीक्यूशन से पहले और उसके दौरान, दोनों समय ऐक्सेस करना है, तो मुझे क्या करना होगा?

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

मुझे Starlark कोड का दस्तावेज़ कैसे बनाना चाहिए?

नियमों और नियम एट्रिब्यूट के लिए, rule या attr.*() के doc पैरामीटर में डोकस्ट्रिंग लिटरल (संभवतः ट्रिपल कोट) पास किया जा सकता है. हेल्पर फ़ंक्शन और मैक्रो के लिए, यहां दिए गए फ़ॉर्मैट के हिसाब से, तीन कोटेशन वाले डॉकस्ट्रिंग लिटरल का इस्तेमाल करें. नियम लागू करने वाले फ़ंक्शन के लिए, आम तौर पर कोई दस्तावेज़ नहीं होता.

सही जगहों पर स्ट्रिंग लिटरल का इस्तेमाल करने से, ऑटोमेटेड टूल के लिए दस्तावेज़ निकालना आसान हो जाता है. जहां भी आपके कोड को पढ़ने वाले को मदद मिल सकती है वहां बिना किसी झिझक के स्टैंडर्ड नॉन-स्ट्रिंग टिप्पणियों का इस्तेमाल करें.