Basel, सोर्स कोड से सॉफ़्टवेयर बनाती है और एक डायरेक्ट्री ट्री में व्यवस्थित होती है. इसे
name@yourcompany.com जैसा कोई प्रोफ़ेशनल ईमेल पता बनाएं. इससे आपका कारोबार ज़्यादा भरोसेमंद बनेगा. वर्कस्पेस में मौजूद सोर्स फ़ाइलों को पैकेज के नेस्ट किए गए क्रम में व्यवस्थित किया जाता है. यहां हर पैकेज एक डायरेक्ट्री होती है, जिसमें मिलती-जुलती सोर्स फ़ाइलों का एक सेट और एक BUILD
फ़ाइल होती है. BUILD
फ़ाइल से पता चलता है कि कौनसा सॉफ़्टवेयर
आउटपुट, सोर्स से बनाए जा सकते हैं.
Workspace
वर्कस्पेस, आपके फ़ाइल सिस्टम में मौजूद एक डायरेक्ट्री ट्री होता है. इसमें उस सॉफ़्टवेयर की सोर्स फ़ाइलें होती हैं जिसे आपको बनाना है. हर फ़ाइल फ़ोल्डर में, WORKSPACE
नाम की एक टेक्स्ट फ़ाइल होती है. यह फ़ाइल खाली हो सकती है या इसमें आउटपुट बनाने के लिए ज़रूरी बाहरी डिपेंडेंसी के रेफ़रंस हो सकते हैं.
जिन डायरेक्ट्री में WORKSPACE
नाम की फ़ाइल होती है उन्हें फ़ाइल का रूट माना जाता है
name@yourcompany.com जैसा कोई प्रोफ़ेशनल ईमेल पता बनाएं. इससे आपका कारोबार ज़्यादा भरोसेमंद बनेगा. इसलिए, Baज़र, उस फ़ाइल फ़ोल्डर में मौजूद डायरेक्ट्री ट्री को अनदेखा कर देता है जो
WORKSPACE
फ़ाइल वाली सबडायरेक्ट्री, क्योंकि यह एक अन्य फ़ाइल फ़ोल्डर बनाती है.
Basel, WORKSPACE
फ़ाइल के उपनाम के तौर पर WORKSPACE.bazel
फ़ाइल के साथ भी काम करता है. अगर दोनों फ़ाइलें मौजूद हैं, तो WORKSPACE.bazel
का इस्तेमाल किया जाता है.
डेटा स्टोर करने की जगह
कोड को डेटा स्टोर करने की जगह में व्यवस्थित किया जाता है. WORKSPACE
वाली डायरेक्ट्री
फ़ाइल, डेटा स्टोर करने की मुख्य जगह का रूट होती है. इसे @
भी कहा जाता है. अन्य (बाहरी) रिपॉज़िटरी, WORKSPACE
फ़ाइल में वर्कस्पेस के नियमों का इस्तेमाल करके तय की जाती हैं या Bzlmod सिस्टम में मॉड्यूल और एक्सटेंशन से जनरेट की जाती हैं. बाहरी सोर्स से डेटा देखें
डिपेंडेंसी के बारे में खास जानकारी देखें.
Bazel के साथ बंडल किए गए Workspace के नियमों की जानकारी, बिल्ड एनसाइक्लोपीडिया के Workspace के नियम सेक्शन में दी गई है. साथ ही, एम्बेड किए गए Starlark रिपॉज़िटरी के नियमों के दस्तावेज़ में भी इन नियमों के बारे में बताया गया है.
बाहरी रिपॉज़िटरी भी रिपॉज़िटरी होती हैं. इसलिए, इनमें अक्सर एक WORKSPACE
फ़ाइल भी होती है. हालांकि, ये अतिरिक्त WORKSPACE
फ़ाइलें
बेज़ल ने अनदेखा कर दिया. विशेष रूप से, ट्रांज़िट पर निर्भर रिपॉज़िटरी
अपने-आप जुड़ जाएगा.
पैकेज
रिपॉज़िटरी में कोड संगठन की मुख्य इकाई पैकेज होती है. पैकेज, मिलती-जुलती फ़ाइलों का कलेक्शन होता है. साथ ही, इसमें यह जानकारी भी होती है कि आउटपुट आर्टफ़ैक्ट बनाने के लिए, इन फ़ाइलों का इस्तेमाल कैसे किया जा सकता है.
पैकेज को ऐसी डायरेक्ट्री के तौर पर परिभाषित किया जाता है जिसमें
BUILD
फ़ाइल का नाम 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 का रनटाइम डेटा, प्रोग्राम को चलाने के दौरान A के लिए उपलब्ध होता है.
सभी नियमों का एक वैरिएंट यह है कि किसी नियम से जनरेट होने वाली फ़ाइलें हमेशा से जुड़ी होती हैं वही पैकेज, जो नियम में हो; में फ़ाइलें जनरेट करना संभव नहीं है कोई दूसरा पैकेज शामिल करें. किसी नियम के इनपुट का किसी दूसरे सोर्स से इस्तेमाल होना आम बात है है.
पैकेज ग्रुप ऐसे पैकेज के सेट होते हैं जिनका मकसद,
कुछ नियम. पैकेज ग्रुप, package_group
फ़ंक्शन से तय किए जाते हैं. वे
तीन प्रॉपर्टी होती हैं: उनमें मौजूद पैकेज की सूची, उनका नाम, और अन्य जानकारी
इनमें शामिल हैं. उनका उल्लेख करने के लिए,
नियमों की visibility
विशेषता या इसकी default_visibility
विशेषता से
package
फ़ंक्शन; ये फ़ाइलें न तो जनरेट करती हैं और न ही उनका इस्तेमाल करती हैं. ज़्यादा जानकारी के लिए, package_group
के दस्तावेज़ देखें.