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

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

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

पैसे चुकाकर बने सदस्य

Depset

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

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

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

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

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

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

पैरामीटर

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

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

अगर हो सके, तो इस फ़ंक्शन का इस्तेमाल न करें. इससे बिल्ड फ़ाइलें नाज़ुक और ऑर्डर पर निर्भर हो जाती हैं. साथ ही, ध्यान रखें कि यह नियम के दो अन्य कन्वर्ज़न एट्रिब्यूट वैल्यू से काफ़ी अलग है, जो इंटरनल फ़ॉर्म से स्टारलार्क तक होती हैं: एक को कंप्यूट किए गए डिफ़ॉल्ट में इस्तेमाल किया जाता है और दूसरे का इस्तेमाल 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 फ़्लैग सेट है, तो इसके बजाय उसी कॉन्टेंट वाला नया म्यूटेबल डिक्शनरी दिखाता है.

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

exports_files

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

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

पैरामीटर

पैरामीटर ब्यौरा
srcs string का क्रम; ज़रूरी है
एक्सपोर्ट की जाने वाली फ़ाइलों की सूची.
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 के बजाय, google में तय किए गए रेपो से लिया गया है, तो यह खाली है. मॉड्यूल एक्सटेंशन से जनरेट किए गए डेटा स्टोर करने की जगहों के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का नाम है. यह module_ctx.modules में दिखने वाले module.name फ़ील्ड जैसा ही है. None वापस कर सकता है.

module_version

string module_version()

इस पैकेज की डेटा स्टोर करने की जगह से जुड़े Bazel मॉड्यूल का वर्शन. इसमें शामिल है. अगर यह पैकेज MODULE.bazel के बजाय, google में तय किए गए रेपो से लिया गया है, तो यह खाली है. मॉड्यूल एक्सटेंशन से जनरेट किए गए डेटा स्टोर करने के लिए, यह एक्सटेंशन को होस्ट करने वाले मॉड्यूल का वर्शन है. यह 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_NAME के बराबर है.

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; या लेबल; ज़रूरी है
इनपुट लेबल स्ट्रिंग या लेबल ऑब्जेक्ट. अगर कोई लेबल ऑब्जेक्ट पास किया जाता है, तो वह वैसे ही दिखेगा.

repository_name

string repository_name()

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

चुनें

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