في ما يلي بعض المشاكل والأسئلة الشائعة في الكتابة.
لماذا لم يتم إنشاء ملفي / لم يتم تنفيذ إجراءي مطلقًا؟
لا يشغّل Bazel سوى الإجراءات اللازمة لإنشاء ملفات الإخراج المطلوبة.
إذا كان الملف الذي تريده يحتوي على تصنيف، يمكنك طلبه مباشرةً:
bazel build //pkg:myfile.txt
إذا كان الملف في مجموعة إخراجات من الهدف، قد تحتاج إلى تحديد مجموعة الإخراج هذه في سطر الأوامر:
bazel build //pkg:mytarget --output_groups=foo
إذا كنت تريد إنشاء الملف تلقائيًا كلما تمت الإشارة إلى هدفك في سطر الأوامر، يمكنك إضافته إلى النتائج التلقائية للقاعدة من خلال عرض موفّر خدمة
DefaultInfo
.
راجِع صفحة القواعد للحصول على مزيد من المعلومات.
لماذا لا يتم تنفيذ وظيفة التنفيذ التابعة لي؟
يحلّل Bazel الأهداف المطلوبة فقط للإصدار. عليك إما تسمية الهدف في سطر الأوامر، أو اختيار شيء يعتمد على الهدف.
لا يتوفّر ملف عند تنفيذ الإجراء أو البرنامج الثنائي
تأكّد من أنّ 1) قد تم تسجيل الملف كإدخال في الإجراء أو البرنامج الثنائي، و2) أنّ النص البرمجي أو الأداة التي يتم تنفيذها تصل إلى الملف باستخدام المسار الصحيح.
بالنسبة إلى الإجراءات، يمكنك الإعلان عن الإدخالات من خلال تمريرها إلى الدالة ctx.actions.*
التي تؤدي إلى إنشاء الإجراء. يمكن الحصول على المسار الصحيح للملف باستخدام File.path
.
بالنسبة إلى البرامج الثنائية (المخرجات القابلة للتنفيذ بواسطة أمر bazel run
أو bazel test
)، يمكنك الإعلان عن طريق تضمينها في ملفات التشغيل. بدلاً من استخدام الحقل path
، استخدِم
File.short_path
، وهو مسار الملف المتعلّق
بدليل Runfiles الذي يتم تنفيذ البرنامج الثنائي فيه.
كيف يمكنني التحكم في الملفات التي يتم إنشاؤها بواسطة bazel build //pkg:mytarget
؟
يمكنك استخدام موفِّر خدمة DefaultInfo
لتحديد النتائج التلقائية.
كيف يمكنني تشغيل برنامج أو إدخال ملف I/O كجزء من تصميمي؟
يمكن الإعلان عن الأداة على أنها هدف، مثل أي جزء آخر من عملية الإنشاء، ويمكن تشغيلها خلال مرحلة التنفيذ للمساعدة على إنشاء أهداف أخرى. لإنشاء إجراء يشغّل أداة، استخدِم ctx.actions.run
ومرّر في الأداة كمعلّمة executable
.
أثناء مراحل التحميل والتحليل، لا يمكن تشغيل الأداة، ولا يمكنك تنفيذ عملية إدخال/إخراج الملف. وهذا يعني أن الأدوات ومحتوى الملفات (باستثناء محتوى الملفين BUILD و .bzl) لا يمكن أن يؤثرا في كيفية إنشاء الرسم البياني للاستهداف والإجراء.
ماذا لو كنت أحتاج إلى الوصول إلى البيانات المنظَّمة نفسها قبل مرحلة التنفيذ وخلالها؟
يمكنك تنسيق البيانات المنظَّمة كملف .bzl. يمكنك load()
الوصول إلى الملف أثناء مراحل التحميل والتحليل. ويمكنك تمريره كإدخال أو ملف تشغيل إلى الإجراءات والملفات القابلة للتنفيذ التي تحتاج إليها أثناء مرحلة التنفيذ.
كيف يمكنني توثيق رمز Starlark؟
بالنسبة إلى القواعد وسمات القواعد، يمكنك تمرير حرفي docstring (من المحتمل أن يكون بين علامات اقتباس ثلاثية) إلى المعلَمة doc
لـ rule
أو attr.*()
. بالنسبة إلى وظائف المساعد ووحدات الماكرو، استخدِم حرفًا نصيًا بين علامات اقتباس ثلاثية باستخدام التنسيق المحدّد هنا.
لا تحتاج دوال تنفيذ القواعد بوجهٍ عام إلى سلسلة النصوص الخاصة بها.
يسهِّل استخدام القيم الحرفية للسلسلة في الأماكن المتوقَّعة استخراج المستندات. لا تتردد في استخدام التعليقات العادية غير النصية، أينما كانت، لأنها قد تساعد قارئ الرمز.