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

किसी समस्या की शिकायत करें

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

पैसे चुकाकर बने सदस्यों के लिए

Depset

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

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

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

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

इसके अलावा, एलिमेंट ऐसे होने चाहिए जिन्हें बदला न जा सके. हालांकि, आने वाले समय में इस पाबंदी में छूट दी जाएगी.

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

पैरामीटर

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

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

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

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

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

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

पैरामीटर

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

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() के साथ काम करता है.

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

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

exports_files

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

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

पैरामीटर

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

ग्लोब

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_खाली` गलत है, तो हर एक शामिल पैटर्न को किसी चीज़ से मेल खाना चाहिए और साथ ही, आखिरी नतीजा खाली नहीं होना चाहिए ('बाहर रखने` के पैटर्न से मेल खाने के बाद).

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

पैरामीटर

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

repo_name

string repo_name()

उस रिपॉज़िटरी का कैननिकल नाम जिसमें पैकेज का अभी आकलन किया जा रहा है. इसकी शुरुआत में कोई हस्ताक्षर नहीं है.

repository_name

string repository_name()

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

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

चुनें

unknown select(x, no_match_error='')

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

पैरामीटर

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

सबपैकेज

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

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

पैरामीटर

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