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

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

सदस्य

depset

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

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

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

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

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

बनाए गए depset का क्रम, उसके transitive depsets के क्रम के साथ काम करना चाहिए. "default" ऑर्डर, किसी भी अन्य ऑर्डर के साथ काम करता है. अन्य सभी ऑर्डर, सिर्फ़ अपने साथ काम करते हैं.

पैरामीटर

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

glob

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

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

पैरामीटर

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

पैकेज

unknown package(**kwargs)

यह पैकेज के हर नियम पर लागू होने वाले मेटाडेटा के बारे में बताता है. इसका इस्तेमाल किसी पैकेज (BUILD फ़ाइल) में ज़्यादा से ज़्यादा एक बार किया जाना चाहिए. अगर इसका इस्तेमाल किया जाता है, तो यह BUILD फ़ाइल में पहली बार होना चाहिए. यह load() स्टेटमेंट के ठीक बाद होना चाहिए.

पैरामीटर

पैरामीटर ब्यौरा
kwargs ज़रूरी है कि
लागू होने वाले आर्ग्युमेंट के लिए, Build Encyclopedia में package() फ़ंक्शन देखें.

package_default_visibility

List package_default_visibility()

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

package_group

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

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

पैरामीटर

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

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(), BUILD फ़ाइल के पैकेज के कॉन्टेक्स्ट का इस्तेमाल करता है, न कि .bzl फ़ाइल के पैकेज के कॉन्टेक्स्ट का. Label() का इस्तेमाल तब करें, जब आपको किसी ऐसे तय टारगेट का रेफ़रंस देना हो जिसे मैक्रो में हार्डकोड किया गया है. जैसे, कंपाइलर. package_relative_label() का इस्तेमाल तब करें, जब आपको BUILD फ़ाइल से मिली लेबल स्ट्रिंग को package_relative_label() ऑब्जेक्ट में बदलना हो.Label (BUILD फ़ाइल या कॉल करने वाली .bzl फ़ाइल के अलावा, किसी अन्य पैकेज के कॉन्टेक्स्ट में स्ट्रिंग को Label में बदलने का कोई तरीका नहीं है. इसलिए, बाहरी मैक्रो को हमेशा लेबल स्ट्रिंग के बजाय, लेबल ऑब्जेक्ट को इनर मैक्रो में पास करना चाहिए.)

पैरामीटर

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

repo_name

string repo_name()

यह उस रिपॉज़िटरी का कैननिकल नाम है जिसमें फ़िलहाल पैकेज का आकलन किया जा रहा है. इसमें @ का निशान नहीं होता.

repository_name

string repository_name()

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

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

चुनें

unknown select(x, no_match_error='')

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

पैरामीटर

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

सब-पैकेज

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

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

पैरामीटर

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