مساحات العمل والطرود والأهداف

ينشئ Bazel برامج من رمز المصدر المنظّم في شجرة دليل يُسمى مساحة عمل. يتم تنظيم ملفات المصدر في مساحة العمل في تسلسل هرمي مدمج للحزم، حيث تكون كل حزمة دليلاً يحتوي على مجموعة من الملفات المصدر ذات الصلة وملف BUILD واحد. يحدّد الملف BUILD مخرجات البرامج التي يمكن إنشاؤها من المصدر.

مساحة العمل

مساحة العمل هي شجرة دليل على نظام الملفات يحتوي على ملفات المصدر للبرنامج الذي تريد إنشاؤه. تتضمّن كل مساحة عمل ملفًا نصيًا يُسمّى WORKSPACE وقد يكون هذا الملف فارغًا أو قد يحتوي على مراجع لاعتمادية خارجية المطلوبة لإنشاء النتائج.

تُعتبر الأدلة التي تحتوي على ملف باسم WORKSPACE جذر مساحة العمل. وبالتالي، يتجاهل "بازيل" أي أشجار دليل في مساحة عمل تم الوصول إليها في دليل فرعي يحتوي على ملف WORKSPACE، لأنها تشكّل مساحة عمل أخرى.

كما يتوافق Bazel مع ملف WORKSPACE.bazel كاسم مستعار لملف WORKSPACE. في حال وجود كلا الملفين، سيتم استخدام WORKSPACE.bazel.

مستودعات

يتم تنظيم الرمز في المستودعات. الدليل الذي يحتوي على الملف WORKSPACE هو جذر المستودع الرئيسي، ويُسمى أيضًا @. يتم تحديد المستودعات (الخارجية) الأخرى في ملف WORKSPACE باستخدام قواعد مساحة العمل.

تم توثيق قواعد مساحة العمل المجمَّعة مع Bazel في القسم قواعد Workspace ضمن موسوعة الموسَّع والمستندات في مستودع Starlark المضمَّن. القواعد.

وبما أنّ المستودعات الخارجية هي المستودعات نفسها، غالبًا ما تتضمّن هذه الملفات ملف WORKSPACE. يتجاهل ملف Bazel هذه الملفات الإضافية البالغ عددها 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 متاحة للتجميع أثناء التجميع، ورموز B متاحة للربط، وتتوفر بيانات وقت التشغيل B لـ A أثناء التنفيذ.

وفي جميع القواعد لا يمكن إنشاء ملفات في حزمة أخرى. على الرغم من ذلك، من الشائع أن تأتي إدخالات القاعدة من حزمة أخرى.

مجموعات الحزم هي مجموعات من الحزم التي تهدف إلى الحد من إمكانية الوصول إلى قواعد معينة. يتم تحديد مجموعات الحزم من خلال الدالة package_group. يتضمن هذا التطبيق ثلاث خصائص: قائمة الحِزم التي يتضمنها واسمه ومجموعات الحِزم الأخرى التي تتضمّنها. والطريقة الوحيدة المسموح بها للإشارة إليها هي من السمة visibility للقواعد أو من السمة default_visibility للدالة package. لا تنشئ الملفات أو تستهلكها. لمزيد من المعلومات، يُرجى الرجوع إلى وثائق package_group.

التصنيفات