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