ملفات BUILD

تصف الأقسام السابقة الحزم والأهداف والتصنيفات ورسمًا بيانيًا للاعتمادية بشكل تجريدي. يوضّح هذا القسم البنية الخرسانية المستخدَمة لتحديد حزمة.

وحسب تعريفها، تحتوي كل حزمة على ملف 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 وحدات مجمّعة بشكل منفصل بلغة البرمجة المحدّدة. ويمكن أن تعتمد المكتبات على مكتبات أخرى، كما يمكن أن تعتمد البرامج الثنائية والاختبارات على المكتبات مع السلوك المتوقّع للتجميع المجمّع.

التصنيفات المهام التابعة