एक्सटेंशन लिखने से जुड़ी कुछ सामान्य समस्याएं और सवाल हैं.
मेरी फ़ाइल क्यों नहीं बनाई गई / मेरी कार्रवाई कभी लागू क्यों नहीं हुई?
Baज़ल, सिर्फ़ अनुरोध की गई आउटपुट फ़ाइलें बनाने के लिए ज़रूरी कार्रवाइयां करता है.
अगर आपकी पसंद की फ़ाइल में कोई लेबल है, तो उसके लिए सीधे तौर पर अनुरोध किया जा सकता है:
bazel build //pkg:myfile.txt
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया हैअगर फ़ाइल टारगेट के आउटपुट ग्रुप में है, तो आपको यह बताना पड़ सकता है कि आउटपुट ग्रुप होगा:
bazel build //pkg:mytarget --output_groups=foo
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया हैअगर आपका टारगेट होने पर, फ़ाइल अपने-आप बन जाए कमांड लाइन पर लिखा है, तो इसे अपने नियम के डिफ़ॉल्ट आउटपुट में
DefaultInfo
की सेवा देने वाली कंपनी की जानकारी देना.
ज़्यादा जानकारी के लिए नियम पेज देखें.
लागू किया गया मेरा फ़ंक्शन एक्ज़ीक्यूट क्यों नहीं हो रहा है?
Baज़ल, सिर्फ़ उन टारगेट का विश्लेषण करता है जिनके लिए बिल्ड के लिए अनुरोध किया गया है. आपको ऐसा करना चाहिए या तो कमांड लाइन पर लक्ष्य का नाम रखें, या कुछ ऐसा जो टारगेट.
मेरी कार्रवाई या बाइनरी चलाने पर फ़ाइल मौजूद नहीं है
पक्का करें कि 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. इसका मतलब है कि टूल और फ़ाइल का कॉन्टेंट (बिल्ड की सामग्री को छोड़कर) और .bzl फ़ाइलें) टारगेट और ऐक्शन ग्राफ़ बनाने के तरीके पर असर नहीं डाल सकतीं.
अगर मुझे एक्ज़ीक्यूशन के चरण से पहले और उसके दौरान, एक ही स्ट्रक्चर्ड डेटा को ऐक्सेस करना पड़े, तो मुझे क्या करना होगा?
स्ट्रक्चर्ड डेटा को .bzl फ़ाइल के तौर पर फ़ॉर्मैट किया जा सकता है. इस फ़ाइल को load()
किया जा सकता है
इसे लोड करने और विश्लेषण के चरणों के दौरान ऐक्सेस करें. इसे इनपुट के तौर पर पास किया जा सकता है या
रनफ़ाइल को उन कार्रवाइयों और एक्ज़ीक्यूटेबल के लिए सबमिट करें जिन्हें एक्ज़ीक्यूशन के दौरान इसकी ज़रूरत होती है.
मैं Starlark कोड को कैसे डॉक्यूमेंट करूं?
नियम और नियम एट्रिब्यूट के लिए, आपके पास एक docstring लिटरल वैल्यू पास करने का विकल्प है
rule
या attr.*()
के doc
पैरामीटर से तीन बार कोट किया हुआ होता है. हेल्पर के लिए
फ़ंक्शन और मैक्रो, दोनों में से किसी एक को शामिल करते समय,
यहां दी गई है.
नियम लागू करने वाले फ़ंक्शन को आम तौर पर, अपनी docstring की ज़रूरत नहीं होती.
सही जगहों पर स्ट्रिंग लिटरल वैल्यू का इस्तेमाल करने पर, रिपोर्ट अपने-आप जनरेट होने की सुविधा मिलती है टूल का इस्तेमाल करके दस्तावेज़ एक्सट्रैक्ट किए जा सकते हैं. स्टैंडर्ड नॉन-स्ट्रिंग टिप्पणियों का इस्तेमाल करें जहां भी यह आपके कोड को पढ़ने वाले की सहायता कर सकता है.