Basel, सोर्स कोड से सॉफ़्टवेयर बनाती है और एक डायरेक्ट्री ट्री में व्यवस्थित होती है. इसे
name@yourcompany.com जैसा कोई प्रोफ़ेशनल ईमेल पता बनाएं. इससे आपका कारोबार ज़्यादा भरोसेमंद बनेगा. वर्कस्पेस में सोर्स फ़ाइलें, नेस्ट किए गए क्रम के हिसाब से व्यवस्थित की गई हैं
पैकेज में से, हर पैकेज एक डायरेक्ट्री होता है. इसमें
सोर्स फ़ाइलें और एक BUILD
फ़ाइल. BUILD
फ़ाइल से पता चलता है कि कौनसा सॉफ़्टवेयर
आउटपुट, सोर्स से बनाए जा सकते हैं.
फ़ाइल फ़ोल्डर
वर्कस्पेस आपके फ़ाइल सिस्टम पर मौजूद एक डायरेक्ट्री ट्री होता है, जिसमें सोर्स
फ़ाइलें डाउनलोड करें जिन्हें आपको बनाना है. हर फ़ाइल फ़ोल्डर में
WORKSPACE
जो खाली हो सकता है या उसमें बाहरी सोर्स के रेफ़रंस हो सकते हैं
डिपेंडेंसी जो आउटपुट बनाने के लिए ज़रूरी हैं.
जिन डायरेक्ट्री में WORKSPACE
नाम की फ़ाइल होती है उन्हें फ़ाइल का रूट माना जाता है
name@yourcompany.com जैसा कोई प्रोफ़ेशनल ईमेल पता बनाएं. इससे आपका कारोबार ज़्यादा भरोसेमंद बनेगा. इसलिए, Baज़र, उस फ़ाइल फ़ोल्डर में मौजूद डायरेक्ट्री ट्री को अनदेखा कर देता है जो
WORKSPACE
फ़ाइल वाली सबडायरेक्ट्री, क्योंकि यह एक अन्य फ़ाइल फ़ोल्डर बनाती है.
Basel, WORKSPACE
फ़ाइल के उपनाम के तौर पर WORKSPACE.bazel
फ़ाइल के साथ भी काम करता है. अगर आपने
दोनों फ़ाइलें मौजूद हैं, WORKSPACE.bazel
का इस्तेमाल किया गया है.
डेटा स्टोर करने की जगह
कोड को डेटा स्टोर करने की जगहों में व्यवस्थित किया गया है. WORKSPACE
वाली डायरेक्ट्री
फ़ाइल, डेटा स्टोर करने की मुख्य जगह का रूट होती है. इसे @
भी कहा जाता है. अन्य, (बाहरी)
डेटा स्टोर करने की जगहों को WORKSPACE
फ़ाइल में, फ़ाइल फ़ोल्डर के नियमों का इस्तेमाल करके तय किया जाता है या
जो Bzlmod सिस्टम में मौजूद मॉड्यूल और एक्सटेंशन से जनरेट होता है. बाहरी सोर्स से डेटा देखें
डिपेंडेंसी के बारे में खास जानकारी देखें.
Baज़ल के साथ बंडल किए गए, Workspace के नियमों को Workspace में दस्तावेज़ किया गया है बिल्ड में नियम सेक्शन एन्साइक्लोपीडिया और एम्बेड किए गए वीडियो से जुड़ा दस्तावेज़ Starlark रिपॉज़िटरी के नियम.
बाहरी डेटा संग्रह स्थान खुद ही डेटा संग्रह स्थान होते हैं, इसलिए इनमें अक्सर
WORKSPACE
फ़ाइल भी है. हालांकि, ये अतिरिक्त WORKSPACE
फ़ाइलें
बेज़ल ने अनदेखा कर दिया. विशेष रूप से, ट्रांज़िट पर निर्भर रिपॉज़िटरी
अपने-आप जुड़ जाएगा.
पैकेज
रिपॉज़िटरी में कोड संगठन की मुख्य इकाई पैकेज होती है. ऐप्लिकेशन पैकेज, मिलती-जुलती फ़ाइलों का एक कलेक्शन होता है. साथ ही, इसे बनाने के तरीके के बारे में भी जानकारी दी गई है का इस्तेमाल, आउटपुट से जुड़े आर्टफ़ैक्ट बनाने के लिए किया जाता है.
पैकेज को एक डायरेक्ट्री के तौर पर परिभाषित किया जाता है, जिसमें BUILD
नाम की फ़ाइल होती है (या
BUILD.bazel
). पैकेज में, डायरेक्ट्री की सभी फ़ाइलों के साथ-साथ सभी फ़ाइलें भी शामिल होती हैं
इसके नीचे की सबडायरेक्ट्री होती हैं. इनमें वे सबडायरेक्ट्री शामिल नहीं होती हैं जिनमें खुद BUILD
फ़ाइल होती है.
इस परिभाषा से, कोई भी फ़ाइल या डायरेक्ट्री दो अलग-अलग
पैकेज.
उदाहरण के लिए, नीचे दिए गए डायरेक्ट्री ट्री में दो पैकेज हैं, my/app
,
और सबपैकेज my/app/tests
. ध्यान दें कि my/app/data
एक पैकेज नहीं है, लेकिन
my/app
पैकेज की एक डायरेक्ट्री.
src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc
टारगेट
पैकेज, टारगेट का एक कंटेनर होता है, जिसे पैकेज के
BUILD
फ़ाइल. ज़्यादातर टारगेट दो मुख्य तरह के होते हैं, फ़ाइलें और नियम.
फ़ाइलों को दो कैटगरी में बांटा गया है. सोर्स फ़ाइलें आम तौर पर इनके ज़रिए लिखी जाती हैं और डेटा स्टोर करने की जगह में चेक इन किया. जनरेट की गई फ़ाइलें, कभी-कभी इन्हें डिराइव्ड फ़ाइलें या आउटपुट फ़ाइलें कहा जाता है, इसलिए चेक इन नहीं किया जाता, लेकिन जो सोर्स फ़ाइलों से जनरेट होता है.
दूसरे तरह के टारगेट को नियम के साथ तय किया गया है. हर नियम इंस्टेंस इनपुट के सेट और आउटपुट फ़ाइलों के सेट के बीच के संबंध के बारे में बताता है. कॉन्टेंट बनाने किसी नियम के इनपुट सोर्स फ़ाइलें हो सकती हैं, लेकिन वे किसी अन्य नियम के आउटपुट भी हो सकते हैं नियम.
क्या किसी नियम का इनपुट एक सोर्स फ़ाइल है या जनरेट की गई फ़ाइल ज़्यादा से ज़्यादा अभौतिक मामले; का मतलब सिर्फ़ उस फ़ाइल के कॉन्टेंट का है. यह तथ्य इससे एक जटिल सोर्स फ़ाइल को ऐसी जनरेट की गई फ़ाइल से बदलना आसान हो जाता है: एक नियम, जैसे कि तब लागू होता है जब मैन्युअल रूप से बहुत ज़्यादा स्ट्रक्चर्ड फ़ाइल बहुत थका देने वाली हो जाती है और कोई व्यक्ति इसे पाने के लिए एक प्रोग्राम लिखता है. उस फ़ाइल के उपभोक्ताओं के लिए किसी बदलाव की आवश्यकता नहीं है. इसके उलट, जनरेट किए गए फ़ाइल को केवल स्थानीय परिवर्तनों से किसी सोर्स फ़ाइल से आसानी से बदला जा सकता है.
किसी नियम के इनपुट में अन्य नियम भी शामिल हो सकते हैं. इसका सही मतलब एक-दूसरे से जुड़ी बातें अक्सर काफ़ी जटिल और भाषा- या नियम पर निर्भर होती हैं, लेकिन यह आसान है: C++ लाइब्रेरी नियम A में कोई दूसरी C++ लाइब्रेरी हो सकती है नियम B का इस्तेमाल करें. इस डिपेंडेंसी का असर यह होता है कि B की हेडर फ़ाइलें A को उपलब्ध होने पर B के प्रतीक, लिंकिंग के दौरान A के पास B का रनटाइम डेटा उपलब्ध रहता है.
सभी नियमों का एक वैरिएंट यह है कि किसी नियम से जनरेट होने वाली फ़ाइलें हमेशा से जुड़ी होती हैं वही पैकेज, जो नियम में हो; में फ़ाइलें जनरेट करना संभव नहीं है कोई दूसरा पैकेज शामिल करें. किसी नियम के इनपुट का किसी दूसरे सोर्स से इस्तेमाल होना आम बात है है.
पैकेज ग्रुप ऐसे पैकेज के सेट होते हैं जिनका मकसद,
कुछ नियम. पैकेज ग्रुप, package_group
फ़ंक्शन से तय किए जाते हैं. वे
तीन प्रॉपर्टी होती हैं: उनमें मौजूद पैकेज की सूची, उनका नाम, और अन्य जानकारी
इनमें शामिल हैं. उनका उल्लेख करने के लिए,
नियमों की visibility
विशेषता या इसकी default_visibility
विशेषता
package
फ़ंक्शन; ये न तो फ़ाइलें जनरेट करती हैं और न ही उनका इस्तेमाल करती हैं. ज़्यादा के लिए
ज़्यादा जानकारी के लिए, package_group
दस्तावेज़.