फ़ाइलें बनाएं

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

BUILD फ़ाइलों में उपलब्ध तरीके. ज़्यादा फ़ंक्शन और बिल्ड के नियमों के लिए, Build Encyclopedia भी देखें. इनका इस्तेमाल BUILD फ़ाइलों में भी किया जा सकता है.

सदस्य

depset

depset depset(direct=None, order="default", *, transitive=None)

depset बनाता है. direct पैरामीटर, डिप्सेट के डायरेक्ट एलिमेंट की सूची है. वहीं, transitive पैरामीटर, उन डिप्सेट की सूची है जिनके एलिमेंट, बनाए गए डिप्सेट के इनडायरेक्ट एलिमेंट बन जाते हैं. डिप्सेट को सूची में बदलने पर, एलिमेंट किस क्रम में दिखाए जाते हैं, यह order पैरामीटर से तय होता है. ज़्यादा जानकारी के लिए, डेप्सेट की खास जानकारी देखें.

किसी डेपसेट के सभी एलिमेंट (डायरेक्ट और इनडायरेक्ट) एक ही तरह के होने चाहिए, जैसा कि एक्सप्रेशन type(x) से मिलता है.

हैश-आधारित सेट का इस्तेमाल, बार-बार होने वाली गड़बड़ियों को हटाने के लिए किया जाता है. इसलिए, किसी डिपेंडेंसी सेट के सभी एलिमेंट को हैश किया जा सकता है. हालांकि, फ़िलहाल सभी कन्स्ट्रक्टर में इस इनवैरिएंट की जांच लगातार नहीं की जाती. लगातार जांच करने की सुविधा चालू करने के लिए, --incompatible_always_check_depset_elements फ़्लैग का इस्तेमाल करें. आने वाले समय में रिलीज़ होने वाले वर्शन में, यह सुविधा डिफ़ॉल्ट रूप से चालू रहेगी. समस्या 10313 देखें.

इसके अलावा, फ़िलहाल एलिमेंट में बदलाव नहीं किया जा सकता. हालांकि, आने वाले समय में इस पाबंदी को हटा दिया जाएगा.

बनाए गए डिप्सेट का क्रम इसके transitive डिप्सेट के क्रम के साथ काम करने वाला होना चाहिए. "default" ऑर्डर किसी भी दूसरे ऑर्डर के साथ काम करता है. अन्य सभी ऑर्डर सिर्फ़ अपने ऑर्डर के साथ काम करते हैं.

पैरामीटर

पैरामीटर ब्यौरा
direct सीक्वेंस या None; डिफ़ॉल्ट रूप से None
डिप्सेट के डायरेक्ट एलिमेंट की सूची होती है.
order string; "default"
नए डिपसेट के लिए ट्रैवर्सल रणनीति है. संभावित वैल्यू के लिए, यहां देखें.
transitive depset का sequence या None; डिफ़ॉल्ट तौर पर None
उन depset की सूची जिनके एलिमेंट, depset के इनडायरेक्ट एलिमेंट बन जाएंगे.

existing_rule

unknown existing_rule(name)

यह एक ऐसा डायक्शनरी जैसा ऑब्जेक्ट दिखाता है जिसे बदला नहीं जा सकता. इसमें इस थ्रेड के पैकेज में इंस्टैंशिएट किए गए नियम के एट्रिब्यूट के बारे में बताया जाता है. अगर उस नाम का कोई नियम इंस्टेंस मौजूद नहीं है, तो None दिखाया जाता है.

यहां, डिकशनरी जैसे ऐसे ऑब्जेक्ट का मतलब है जिसे बदला नहीं जा सकता. यह ऑब्जेक्ट x, डिक्शनरी जैसे दोहराव, len(x), name in x, x[name], x.get(name), x.items(), x.keys(), और x.values() के साथ काम करता है.

नतीजे में हर एट्रिब्यूट के लिए एक एंट्री होती है. हालांकि, इसमें निजी एट्रिब्यूट (जिनके नाम अक्षर से नहीं शुरू होते) और कुछ ऐसे लेगसी एट्रिब्यूट टाइप शामिल नहीं होते जिन्हें दिखाया नहीं जा सकता. इसके अलावा, डिक्शनरी में नियम के इंस्टेंस के name और kind (उदाहरण के लिए, 'cc_binary') के लिए एंट्री शामिल होती हैं.

नतीजे की वैल्यू, एट्रिब्यूट की वैल्यू इस तरह दिखाती हैं:

  • str, int, और bool टाइप की विशेषताओं को वैसा ही दिखाया जाता है जैसा वे हैं.
  • लेबल को एक ही पैकेज में मौजूद टारगेट के लिए ':foo' या किसी दूसरे पैकेज में मौजूद टारगेट के लिए '//pkg:name' फ़ॉर्मैट की स्ट्रिंग में बदल दिया जाता है.
  • सूचियों को टूपल के तौर पर दिखाया जाता है और लिखवाने की संख्या को नए और बदले जा सकने वाले डिक्शनरी में बदल दिया जाता है. इन्हें एक ही तरीके से बार-बार बदला जाता है.
  • select वैल्यू, ऊपर बताए गए तरीके से बदले गए कॉन्टेंट के साथ दिखाए जाते हैं.
  • जिन एट्रिब्यूट के लिए नियम लागू करने के दौरान कोई वैल्यू नहीं दी गई थी और जिनकी डिफ़ॉल्ट वैल्यू का हिसाब लगाया गया है उन्हें नतीजे से बाहर रखा जाता है. (एनालिसिस के फ़ेज़ तक, कैलकुलेट किए गए डिफ़ॉल्ट वैल्यू का हिसाब नहीं लगाया जा सकता.).

अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल सिर्फ़ नियम फ़ाइनलाइज़र सिम्बॉलिक मैक्रो के लागू करने के फ़ंक्शन में ही करें. हमारा सुझाव है कि इस फ़ंक्शन का इस्तेमाल दूसरे संदर्भों में न करें. आने वाले समय में, Bazel की रिलीज़ में इसे बंद कर दिया जाएगा. इसकी वजह यह है कि इससे BUILD फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं. साथ ही, ध्यान रखें कि यह इंटरनल फ़ॉर्म से Starlark में, नियम के एट्रिब्यूट की वैल्यू के दो अन्य कन्वर्ज़न से थोड़ा अलग है: एक का इस्तेमाल, कैलकुलेट किए गए डिफ़ॉल्ट वैल्यू के लिए किया जाता है और दूसरे का इस्तेमाल ctx.attr.foo के लिए किया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
name string; ज़रूरी है
टारगेट का नाम.

existing_rules

unknown existing_rules()

इस थ्रेड के पैकेज में अब तक इंस्टैंशिएट किए गए नियमों की जानकारी देने वाला, लिखवाने की सुविधा जैसा ऑब्जेक्ट देता है. डिक्शनरी जैसे ऑब्जेक्ट की हर एंट्री, नियम के इंस्टेंस के नाम को उस नतीजे से मैप करती है जो existing_rule(name) से वापस मिलेगा.

यहां, लिखने के तरीके जैसे ऑब्जेक्ट का मतलब है, बहुत ज़्यादा बदलाव न किए जा सकने वाले ऑब्जेक्ट x का मतलब है कि बार-बार बदलाव नहीं किया जा सकता, len(x), name in x, x[name], x.get(name), x.items(), x.keys(), और x.values().

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

exports_files

None exports_files(srcs, visibility=None, licenses=None)

इस पैकेज से जुड़ी उन फ़ाइलों की सूची दिखाती है जिन्हें दूसरे पैकेज में एक्सपोर्ट किया गया है.

पैरामीटर

पैरामीटर ब्यौरा
srcs string की क्रम; ज़रूरी है
एक्सपोर्ट की जाने वाली फ़ाइलों की सूची.
visibility sequence या None; डिफ़ॉल्ट तौर पर None
है विज़िबिलिटी का एलान किया जा सकता है. फ़ाइलें बताए गए टारगेट पर दिखेंगी. अगर फ़ाइलों के दिखने की कोई जानकारी नहीं दी गई है, तो वे हर पैकेज में दिखेंगी.
licenses स्ट्रिंग का क्रम या None; डिफ़ॉल्ट तौर पर None
लाइसेंस की जानकारी देनी होगी.

glob

sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob मौजूदा पैकेज में, हर फ़ाइल की ऐसी नई, बदली जा सकने वाली, क्रम से लगाई गई सूची दिखाता है जो:
  • include में मौजूद कम से कम एक पैटर्न से मेल खाता हो.
  • exclude में किसी भी पैटर्न से मेल नहीं खाता (डिफ़ॉल्ट []).
अगर exclude_directories आर्ग्युमेंट चालू है (1 पर सेट है), तो डायरेक्ट्री टाइप की फ़ाइलों को नतीजों से हटा दिया जाएगा (डिफ़ॉल्ट 1).

पैरामीटर

पैरामीटर ब्यौरा
include string का क्रम; यह डिफ़ॉल्ट रूप से []
ग्लॉब पैटर्न की सूची में शामिल होता है.
exclude स्ट्रिंग का क्रम; डिफ़ॉल्ट तौर पर []
होता है बाहर रखने के लिए ग्लोब पैटर्न की सूची.
exclude_directories int; डिफ़ॉल्ट रूप से 1
होता है यह एक फ़्लैग है, जो यह तय करता है कि डायरेक्ट्री को शामिल करना है या नहीं.
allow_empty डिफ़ॉल्ट रूप से unbound
क्या ग्लोब पैटर्न को किसी भी चीज़ से मैच करने की अनुमति है. अगर `allow_empty` की वैल्यू False है, तो हर शामिल किए गए पैटर्न को किसी चीज़ से मैच करना चाहिए. साथ ही, फ़ाइनल नतीजा भी खाली नहीं होना चाहिए. ऐसा तब होगा, जब `exclude` पैटर्न से मैच करने वाले आइटम हटा दिए जाएंगे.

module_name

string module_name()

इस पैकेज के मौजूद होने वाले रिपॉज़िटरी से जुड़े Bazel मॉड्यूल का नाम. अगर यह पैकेज, MODULE.bazel के बजाय WORKSPACE में तय किए गए किसी रेपो से है, तो यह खाली है. मॉड्यूल एक्सटेंशन से जनरेट किए गए रिपॉज़िटरी के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का नाम होता है. यह module_ctx.modules में दिखने वाले module.name फ़ील्ड के जैसा ही है. None को वापस किया जा सकता है.

module_version

string module_version()

इस पैकेज के मौजूद होने वाले रिपॉज़िटरी से जुड़े Bazel मॉड्यूल का वर्शन. अगर यह पैकेज, MODULE.bazel के बजाय WORKSPACE में तय किए गए किसी रेपो से है, तो यह खाली है. मॉड्यूल एक्सटेंशन से जनरेट किए गए रिपॉज़िटरी के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का वर्शन होता है. यह module_ctx.modules में दिखने वाले module.version फ़ील्ड के जैसा ही है. None को वापस किया जा सकता है.

package_group

None package_group(name, packages=[], includes=[])

यह फ़ंक्शन, पैकेज का एक सेट तय करता है और ग्रुप को एक लेबल असाइन करता है. लेबल का रेफ़रंस, visibility एट्रिब्यूट में दिया जा सकता है.

पैरामीटर

पैरामीटर ब्यौरा
name स्ट्रिंग; ज़रूरी है
इस नियम का यूनीक नाम.
packages स्ट्रिंग का क्रम; डिफ़ॉल्ट []
है इस ग्रुप में मौजूद पैकेज की पूरी जानकारी.
includes स्ट्रिंग का क्रम; डिफ़ॉल्ट []
है इस पैकेज में शामिल अन्य पैकेज ग्रुप.

package_name

string package_name()

उस पैकेज का नाम जिसका आकलन किया जा रहा है. इसमें रिपॉज़िटरी का नाम शामिल नहीं है. उदाहरण के लिए, BUILD फ़ाइल some/package/BUILD में, इसकी वैल्यू some/package होगी. अगर BUILD फ़ाइल, .bzl फ़ाइल में दिए गए किसी फ़ंक्शन को कॉल करती है, तो package_name(), कॉलर BUILD फ़ाइल पैकेज से मैच करेगा.

package_relative_label

Label package_relative_label(input)

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

इस फ़ंक्शन को सिर्फ़ BUILD फ़ाइल और उन मैक्रो का आकलन करते समय कॉल किया जा सकता है जिन्हें यह सीधे या किसी दूसरे तरीके से कॉल करता है. उदाहरण के लिए, इसे नियम लागू करने वाले फ़ंक्शन में कॉल नहीं किया जा सकता.

इस फ़ंक्शन का नतीजा वही Label वैल्यू होती है जो BUILD फ़ाइल में बताए गए टारगेट के लेबल-वैल्यू वाले एट्रिब्यूट में दी गई स्ट्रिंग को पास करने पर मिलती है.

इस्तेमाल से जुड़ी जानकारी: इस फ़ंक्शन और Label() के बीच का अंतर यह है कि Label(), .bzl फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि BUILD फ़ाइल के पैकेज का. जब आपको किसी ऐसे तय टारगेट के बारे में बताने की ज़रूरत हो जिसे मैक्रो में हार्डकोड किया गया हो, जैसे कि कंपाइलर, तो Label() का इस्तेमाल करें. जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को Label ऑब्जेक्ट में सामान्य बनाना हो, तो package_relative_label() का इस्तेमाल करें. (किसी पैकेज के संदर्भ में, स्ट्रिंग को Label में बदलने का कोई तरीका नहीं है. ऐसा करने के लिए, BUILD फ़ाइल या कॉल की जा रही .bzl फ़ाइल का इस्तेमाल करना होगा. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को अंदरूनी मैक्रो में पास करना चाहिए.)

पैरामीटर

पैरामीटर ब्यौरा
input स्ट्रिंग या लेबल; ज़रूरी है
इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर लेबल ऑब्जेक्ट को पास किया जाता है, तो उसे पहले जैसा किया जाता है.

repo_name

string repo_name()

उस डेटा स्टोर करने की जगह का कैननिकल नाम जिसमें मौजूद पैकेज का फ़िलहाल आकलन किया जा रहा है. इसमें कोई @ साइन नहीं होना चाहिए.

repository_name

string repository_name()

एक्सपेरिमेंटल. यह एपीआई, एक्सपेरिमेंट के तौर पर उपलब्ध है. इसमें कभी भी बदलाव किया जा सकता है. कृपया इस पर भरोसा न करें. इसे एक्सपेरिमेंट के तौर पर चालू किया जा सकता है. इसके लिए, --+incompatible_enable_deprecated_label_apis
अब काम नहीं करता को सेट करें. इसके बजाय, repo_name का इस्तेमाल करें. इसमें नकली लीडिंग एट-साइन नहीं होता, लेकिन यह वैसे ही काम करता है.

उस रिपॉज़िटरी का कैननिकल नाम जिसमें मौजूद पैकेज का फ़िलहाल आकलन किया जा रहा है. इसके आगे एक ऐट-साइन (@) लगा होता है. उदाहरण के लिए, WORKSPACE स्टैंश local_repository(name='local', path=...) से बनाए गए पैकेज में, यह @local पर सेट हो जाएगा. मुख्य रिपॉज़िटरी के पैकेज में, यह @ पर सेट हो जाएगा.

चुनें

unknown select(x, no_match_error='')

select() एक हेल्पर फ़ंक्शन है, जो नियम एट्रिब्यूट को कॉन्फ़िगर करने लायक बनाता है. ज़्यादा जानकारी के लिए, एनसाइक्लोपीडिया बनाना देखें.

पैरामीटर

पैरामीटर ब्यौरा
x dict; ज़रूरी है
एक डिक्शनरी, जो कॉन्फ़िगरेशन की शर्तों को वैल्यू पर मैप करती है. हर कुंजी एक Label या लेबल स्ट्रिंग होती है, जो config_setting याstruct_value इंस्टेंस की पहचान करती है. स्ट्रिंग के बजाय लेबल का इस्तेमाल कब करना है, यह जानने के लिए मैक्रो के बारे में दस्तावेज़ देखें.
no_match_error string; डिफ़ॉल्ट तौर पर '' है
अगर कोई शर्त मेल नहीं खाती है, तो रिपोर्ट करने के लिए कस्टम गड़बड़ी की सुविधा ज़रूरी नहीं है.

सब-पैकेज

sequence subpackages(include, exclude=[], allow_empty=False)

यह फ़ंक्शन, मौजूदा पैकेज के हर डायरेक्ट सब-पैकेज की नई सूची दिखाता है. इस सूची में बदलाव किया जा सकता है. फ़ाइल-सिस्टम डायरेक्ट्री की गहराई का इस पर कोई असर नहीं पड़ता. लौटाए गए पैकेज की सूची क्रम से लगाई जाती है. इसमें मौजूदा पैकेज से मिलते-जुलते सबपैकेज के नाम होते हैं. हमारा सुझाव है कि इस फ़ंक्शन को सीधे कॉल करने के बजाय, bazel_skylib.subpackages मॉड्यूल में मौजूद तरीकों का इस्तेमाल करें.

पैरामीटर

पैरामीटर ब्यौरा
include string का क्रम; ज़रूरी है
सबपैकेज स्कैन में शामिल किए जाने वाले ग्लोब पैटर्न की सूची.
exclude string का क्रम. यह डिफ़ॉल्ट रूप से []
ग्लोब पैटर्न की सूची होती है, जिसे सबपैकेज स्कैन से बाहर रखा जाना है.
allow_empty bool; डिफ़ॉल्ट False है
अगर कॉल खाली सूची लौटाता है, तो हम विफल होते हैं या नहीं. डिफ़ॉल्ट रूप से, खाली सूची से पता चलता है कि BUILD फ़ाइल में संभावित गड़बड़ी है. इसमें subpackages() को कॉल करना ज़रूरी नहीं है. सही पर सेट करने से यह फ़ंक्शन उस मामले में सफल होता है.