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

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

BUILD फ़ाइलों में उपलब्ध तरीके. ज़्यादा functions और बिल्ड के नियमों के लिए, 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 sequence या None; डिफ़ॉल्ट तौर पर None
किसी डेपसेट के डायरेक्ट एलिमेंट की सूची.
order डिफ़ॉल्ट तौर पर, यह "default"
होता है नए डेपसेट के लिए ट्रैवर्सल की रणनीति. संभावित वैल्यू के लिए, यहां देखें.
transitive depset का sequence या None; डिफ़ॉल्ट तौर पर None
उन depset की सूची जिनके एलिमेंट, depset के इनडायरेक्ट एलिमेंट बन जाएंगे.

existing_rule

unknown existing_rule(name)

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

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

अगर --noincompatible_existing_rules_immutable_view फ़्लैग सेट है, तो यह उसी कॉन्टेंट के साथ एक नया बदलाव किया जा सकने वाला डिक्शनरी फ़ंक्शन दिखाता है.

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

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

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

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

पैरामीटर

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

existing_rules

unknown existing_rules()

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

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

अगर --noincompatible_existing_rules_immutable_view फ़्लैग सेट है, तो यह उसी कॉन्टेंट के साथ एक नया बदलाव किया जा सकने वाला डिक्शनरी फ़ंक्शन दिखाता है.

ध्यान दें: अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल करने से बचें. इससे BUILD फ़ाइलें अस्थिर और क्रम पर निर्भर हो जाती हैं. इसके अलावा, अगर --noincompatible_existing_rules_immutable_view फ़्लैग सेट है, तो यह फ़ंक्शन बहुत महंगा हो सकता है. खास तौर पर, अगर इसे किसी लूप में कॉल किया जाता है.

exports_files

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

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

पैरामीटर

पैरामीटर ब्यौरा
srcs स्ट्रिंग का क्रम; ज़रूरी है
एक्सपोर्ट की जाने वाली फ़ाइलों की सूची.
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 स्ट्रिंग का क्रम; डिफ़ॉल्ट तौर पर []
होता है शामिल किए जाने वाले ग्लोब पैटर्न की सूची.
exclude स्ट्रिंग का क्रम; डिफ़ॉल्ट तौर पर []
होता है बाहर रखने के लिए ग्लोब पैटर्न की सूची.
exclude_directories डिफ़ॉल्ट रूप से 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)

फ़िलहाल शुरू किए जा रहे पैकेज के संदर्भ में, इनपुट स्ट्रिंग को लेबल ऑब्जेक्ट में बदलता है. इसका मतलब है कि वह 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 ज़रूरी
एक डिक्शनरी, जो कॉन्फ़िगरेशन की शर्तों को वैल्यू पर मैप करती है. हर कुंजी एक लेबल या लेबल स्ट्रिंग होती है, जो config_setting या constraint_value इंस्टेंस की पहचान करती है. स्ट्रिंग के बजाय लेबल का इस्तेमाल कब करना है, यह जानने के लिए मैक्रो के बारे में दस्तावेज़ देखें.
no_match_error डिफ़ॉल्ट तौर पर, ''
कोई शर्त मेल न खाने पर, रिपोर्ट करने के लिए वैकल्पिक कस्टम गड़बड़ी.

सब-पैकेज

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

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

पैरामीटर

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