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

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

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

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

Depset

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

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

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

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

साथ ही, यह ज़रूरी है कि मौजूदा समय में एलिमेंट में बदलाव न किया जा सके. हालांकि, आने वाले समय में यह पाबंदी हट जाएगी.

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

पैरामीटर

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

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

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

exports_files

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

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

पैरामीटर

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

ग्लोब

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

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

पैरामीटर

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

module_name

string module_name()

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

module_version

string module_version()

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

package_group

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

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

पैरामीटर

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

package_name

string package_name()

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

package_relative_label

Label package_relative_label(input)

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

इस फ़ंक्शन को सिर्फ़ बिल्ड फ़ाइल और मैक्रो को, सीधे तौर पर या किसी अन्य तरीके से कॉल करते समय कॉल किया जा सकता है. इसलिए, हो सकता है कि इसे नियम लागू करने वाले फ़ंक्शन में कॉल न किया जाए.

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

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

पैरामीटर

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

repo_name

string repo_name()

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

repository_name

string repository_name()

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

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

चुनें

unknown select(x, no_match_error='')

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

पैरामीटर

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

सबपैकेज

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

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

पैरामीटर

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