سيتم إطلاق BazelCon لعام 2022 في الفترة من 16 إلى 17 تشرين الثاني (نوفمبر) في نيويورك وعلى الإنترنت.
التسجيل اليوم

إنشاء الملفات

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

وصفت الأقسام السابقة الحزم والأهداف والتصنيفات ورسم بياني تبعية الإنشاء بشكل تجريدي. يصف هذا القسم البنية الخرسانية التي تُستخدم لتحديد حزمة.

وفقًا للتعريف، تحتوي كل حزمة على ملف BUILD، وهو برنامج قصير. يتم تقييم BUILD ملف باستخدام لغة أساسية، وهي Starlark.

ويتم تفسيرها كقائمة تسلسلية من العبارات.

بوجه عام، الترتيب مهم: يجب تحديد المتغيّرات قبل استخدامها، مثلاً. ومع ذلك، تتألف معظم ملفات BUILD من تعريفات قواعد الإصدار فقط، ويُعد الترتيب النسبي لهذه العبارات أمرًا مهمًا؛ كل هذه المسائل تُحدّد القواعد التي تم توضيحها، بالإضافة إلى القيم ذات الصلة، من خلال اكتمال تقييم الحزمة الزمنية.

عند تنفيذ دالة قاعدة إصدار، مثل cc_library، يتم إنشاء استهداف جديد في الرسم البياني. يمكن إحالة هذا الهدف لاحقًا باستخدام تصنيف.

في ملفات BUILD البسيطة، يمكن إعادة ترتيب تعريفات القواعد بحرية بدون تغيير السلوك.

للتشجيع على فصل واضح بين الرمز والبيانات، لا يمكن أن تحتوي ملفات BUILD على تعريفات الوظائف أو for كشوفات الحساب أو بيانات if (لكن يُسمح بفهم العناصر والتعبيرات if). . ويمكن الإعلان عن الدوال في .bzl ملف بدلاً من ذلك. إضافةً إلى ذلك، لا يُسمح باستخدام *args و**kwargs وسيطة في BUILD ملفًا. يمكنك بدلاً من ذلك إدراج جميع الوسيطات بشكل صريح.

ولن تتمكّن البرامج في Starlark من تنفيذ مؤتمر I/O عشوائي. ويؤدي هذا التفاوت إلى جعل بنية ملفات BUILD مظهرًا دائريًا، حيث يعتمد ذلك فقط على مجموعة من الإدخالات المعروفة، والتي تُعدّ ضروريًا لضمان إمكانية إعادة إظهار الإصدارات. لمزيد من التفاصيل، راجع Hermeticity.

يجب كتابة ملفات BUILD باستخدام أحرف ASCII فقط، على الرغم من أنه يتم تفسيرها من الناحية الفنية باستخدام مجموعة أحرف Latin-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، لا يتم تصدير الرموز التي تبدأ بـ _ ولا يمكن تحميلها من ملف آخر. لا يؤثر مستوى الرؤية على التحميل (بعد): لن تحتاج إلى استخدام exports_files لجعل ملف .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 وحدات مجمّعة بشكل منفصل في لغة البرمجة المحددة. يمكن أن تعتمد المكتبات على مكتبات أخرى، ويمكن أن تعتمد البرامج الثنائية والاختبارات على المكتبات التي تستخدم أسلوب التجميع المنفصل.

التصنيفات العناصر التابعة