تصف الأقسام السابقة الحزم والأهداف والتصنيفات ورسمًا بيانيًا للاعتمادية بشكل تجريدي. يوضّح هذا القسم البنية الخرسانية المستخدَمة لتحديد حزمة.
وحسب تعريفها، تحتوي كل حزمة على ملف BUILD
، وهو برنامج قصير. BUILD
يتم تقييم الملفات باستخدام لغة إمبراطورية،
Starlark.
ويتم تفسيرها على أنها قائمة تسلسلية من العبارات.
وبشكل عام، يجب الاهتمام بالترتيب: يجب تحديد المتغيرات قبل استخدامها، على سبيل المثال. ومع ذلك، تتألف معظم ملفات BUILD
من تصريحات
لقواعد الإنشاء فقط، والترتيب النسبي لهاتين العبارتين مهما، أما جميع
المسائل المهمة، فهي أي القواعد التي تم الإعلان عنها وقيمها التي اكتملت من خلال
تقييم الحزمة الزمنية.
عند تنفيذ دالة قاعدة إصدار، مثل cc_library
، يتم إنشاء هدف جديد في الرسم البياني. ويمكن إحالة هذا الهدف لاحقًا باستخدام تصنيف.
في ملفات BUILD
البسيطة، يمكن إعادة ترتيب تصريحات القواعد بحرية بدون تغيير أي سلوك.
للتشجيع على الفصل بين الرموز والبيانات، يجب ألا تحتوي ملفات BUILD
على تعريفات للدوال أو عبارات for
أو عبارات if
(ولكن يمكن السماح بفهم القائمة وتعبيرات if
). ويمكن الإعلان عن الدوال في .bzl
ملف بدلاً من ذلك. بالإضافة إلى ذلك، لا يُسمح باستخدام وسيطتَي *args
و**kwargs
في BUILD
ملف، ولكن يمكنك إدراج كل الوسيطة بوضوح.
في المقابل، لا تستطيع البرامج في Starlark أداء مؤتمر I/O العشوائي. ويؤدي هذا المتغير إلى تفسير ملفات BUILD
بشكل متناسق، حيث يعتمد فقط على مجموعة معروفة من الإدخالات، وهو أمر أساسي لضمان إعادة إنشاء الإصدارات.
للاطّلاع على مزيد من التفاصيل، راجِع القسم ال كتب العالية.
يجب كتابة ملفات BUILD
باستخدام أحرف ASCII فقط، ولكن من الناحية الفنية، يتم تفسيرها باستخدام مجموعة الأحرف اللاتينية 1.
بما أنّه يجب تعديل ملفات BUILD
كلما تم تغيير اعتماديات
الرمز الأساسي، يتم عادةً الاحتفاظ بها من قِبل عدة مستخدمين في فريق. يجب أن يعلّق BUILD
مؤلّف الملف بحرية لتوثيق دور كل هدف تصميم، سواء كان الغرض منه الاستخدام العام أم لا، وتوثيق دور الحزمة نفسها.
تحميل إضافة
إضافات Bazel هي ملفات تنتهي بـ .bzl
. يمكنك استخدام عبارة load
لاستيراد رمز من إحدى الإضافات.
load("//foo/bar:file.bzl", "some_library")
يعمل هذا الرمز على تحميل الملف foo/bar/file.bzl
وإضافة الرمز some_library
إلى البيئة. ويمكن استخدام هذا لتحميل قواعد أو دوال أو ثوابت جديدة
(على سبيل المثال، سلسلة أو قائمة). يمكن استيراد رموز متعددة باستخدام الوسيطات الإضافية للاستدعاء إلى load
. يجب أن تكون الوسيطات حرفية نصية (بدون متغيّر) ويجب أن تظهر عبارات load
على المستوى الأعلى، ولا يمكن أن تكون في نص دالة.
الوسيطة الأولى للسمة load
هي label تحدّد ملف .bzl
. إذا كان التصنيف نسبيًا، يتم التعامل معه في ما يتعلق بالحزمة (وليس الدليل) التي تحتوي على ملف bzl
الحالي. يجب أن تستخدِم التصنيفات النسبية في
كشوفات الحساب load
سمة :
بادئة.
يدعم load
أيضًا الأسماء المستعارة، وبالتالي يمكنك تخصيص أسماء مختلفة للرموز التي تم استيرادها.
load("//foo/bar:file.bzl", library_alias = "some_library")
يمكنك تحديد عناوين بديلة للبريد الإلكتروني متعددة ضمن عبارة load
واحدة. بالإضافة إلى ذلك، يمكن أن تحتوي قائمة الوسيطات على أسماء مستعارة وأسماء رموز عادية. المثال التالي قانوني تمامًا (يُرجى ملاحظة الحالات التي يتم فيها استخدام علامات الاقتباس).
load(":my_rules.bzl", "some_rule", nice_alias = "some_other_rule")
في ملف .bzl
، لا يتم تصدير الرموز التي تبدأ بـ _
ولا يمكن تحميلها من ملف آخر.
يمكنك استخدام إذن الدخول للتحميل لتقييد
المستخدمين الذين يمكنهم تحميل ملف .bzl
.
أنواع قواعد الإصدار
تستند معظم قواعد التصميم إلى العائلات، ويتم تجميعها معًا حسب
اللغة. على سبيل المثال، cc_binary
وcc_library
وcc_test
هي قواعد الإصدار الثنائية والمكتبات وC++ والاختبارات على التوالي. وتستخدم اللغات الأخرى نفس نظام التسمية ببادئة مختلفة، مثل java_*
للغة Java. ويتم توثيق بعض هذه الدوال في
الموسوعة، ولكن يمكن لأي شخص
إنشاء قواعد جديدة.
تنشئ
*_binary
قواعد برامج قابلة للتنفيذ بلغة معيّنة. بعد إنشاء الإصدار، سيظل الملف التنفيذي متوفّرًا في شجرة المخرجات الثنائية الخاصة بأداة الإصدار بالاسم نفسه المقابل للتصنيف الخاص بالقاعدة، لذا ستظهر//my:program
في (على سبيل المثال)$(BINDIR)/my/program
.وفي بعض اللغات، تؤدي هذه القواعد أيضًا إلى إنشاء دليل لملفات التشغيل يحتوي على جميع الملفات المذكورة في سمة
data
التابعة للقاعدة أو أي قاعدة في إغلاقها على الأجهزة التابعة بشكل مؤقت. يتم تجميع هذه المجموعة من الملفات معًا في مكان واحد لسهولة نشرها في مرحلة الإنتاج.قواعد
*_test
هي تخصص لقاعدة*_binary
، ويتم استخدامها للاختبار التلقائي. الاختبارات هي ببساطة برامج لا تحقّق أي نجاح.كما هو الحال في البرامج الثنائية، تحتوي الاختبارات أيضًا على أشجار تشغيل، والملفات أسفله هي الملفات الوحيدة التي قد يفتحها الاختبار بشكل قانوني في وقت التشغيل. على سبيل المثال، قد يتم فتح برنامج
cc_test(name='x', data=['//foo:bar'])
وقراءة$TEST_SRCDIR/workspace/foo/bar
أثناء التنفيذ. (تستخدم كل لغة برمجة وظيفة خاصة بها للوصول إلى قيمة$TEST_SRCDIR
، ولكنها جميعًا تساوي استخدام متغيّر البيئة مباشرةً). يؤدي عدم ملاحظة هذه القاعدة إلى تعذّر الاختبار عند تنفيذه على مضيف اختبار عن بُعد.تحدّد قواعد
*_library
وحدات مجمّعة بشكل منفصل بلغة البرمجة المحدّدة. ويمكن أن تعتمد المكتبات على مكتبات أخرى، كما يمكن أن تعتمد البرامج الثنائية والاختبارات على المكتبات مع السلوك المتوقّع للتجميع المجمّع.
التصنيفات | المهام التابعة |