سوالات متداول

اینها برخی از مسائل و سؤالات رایج در مورد پسوندهای نوشتن هستند.

چرا فایل من تولید نمی شود / عمل من هرگز اجرا نمی شود؟

بازل تنها اقدامات مورد نیاز برای تولید فایل های خروجی درخواست اجرا می کند.

  • اگر فایل شما می خواهید یک برچسب، شما می توانید آن را به طور مستقیم درخواست: bazel build //pkg:myfile.txt

  • اگر فایل در یک گروه خروجی از هدف، شما ممکن است نیاز به مشخص است که گروه خروجی در خط فرمان: bazel build //pkg:mytarget --output_groups=foo

  • اگر می خواهید فایل را به طور خودکار ساخته شود هر زمان که هدف خود را بر روی خط فرمان اشاره شد، آن را به خروجی به طور پیش فرض حکومت خود را اضافه کنید با بازگرداندن DefaultInfo ارائه دهنده.

مراجعه کنید صفحه قوانین برای اطلاعات بیشتر.

چرا تابع پیاده سازی من اجرا نمی شود؟

Bazel تنها اهدافی را که برای ساخت درخواست شده اند تجزیه و تحلیل می کند. شما باید یا هدف را در خط فرمان نام ببرید یا چیزی که به هدف بستگی دارد.

هنگامی که اکشن یا باینری من اجرا می شود، یک فایل از دست رفته است

مطمئن شوید که 1) فایل به عنوان ورودی اکشن یا باینری ثبت شده است، و 2) اسکریپت یا ابزار در حال اجرا با استفاده از مسیر صحیح به فایل دسترسی دارد.

برای اقدامات، شما اعلام ورودی با عبور آنها را به ctx.actions.* عملکرد برای اجیاد عمل است. مسیر مناسب برای فایل را می توان با استفاده از به دست آمده File.path .

برای فایل های باینری (خروجی اجرایی اجرا شده توسط یک bazel run یا bazel test فرمان)، به شما اعلام ورودی از جمله آنها را در runfiles . به جای استفاده از path درست، استفاده File.short_path است که مسیر فایل را نسبت به دایرکتوری runfiles که در آن اجرا باینری است.

چگونه می توانید کنترل من که فایل های ساخته شده bazel build //pkg:mytarget ؟

استفاده از DefaultInfo ارائه دهنده به مجموعه ای از خروجی به طور پیش فرض .

چگونه می توانم یک برنامه را اجرا کنم یا فایل I/O را به عنوان بخشی از ساختم انجام دهم؟

یک ابزار را می توان به عنوان یک هدف، مانند هر قسمت دیگر از ساخت شما، اعلام کرد و در مرحله اجرا اجرا کرد تا به ساخت اهداف دیگر کمک کند. برای ایجاد یک عمل است که یک ابزار، استفاده از اجرا می شود ctx.actions.run و پاس در ابزار به عنوان executable پارامتر.

در طول بارگذاری و تجزیه و تحلیل مراحل، یک ابزار می تواند اجرا شود، و نه می تواند به شما انجام فایل I / O. این بدان معناست که ابزارها و محتویات فایل (به جز محتویات فایل های BUILD و bzl.) نمی توانند بر نحوه ایجاد نمودارهای هدف و عمل تأثیر بگذارند.

اگر من نیاز به دسترسی به داده های ساختاری یکسانی قبل و در طول مرحله اجرا داشته باشم، چه؟

می توانید داده های ساخت یافته را به صورت فایل bzl. فرمت کنید. شما می توانید load() برای دسترسی به آن در طول بارگذاری و تجزیه و تحلیل مراحل فایل. می توانید آن را به عنوان یک ورودی یا فایل اجرا به اکشن ها و فایل های اجرایی که در مرحله اجرا به آن نیاز دارند ارسال کنید.

چگونه باید کد Starlark را مستند کنم؟

برای اطلاع از قوانین و ویژگی های حکومت، شما می توانید یک لفظ رشته مستندساز (احتمالا سه به نقل از) به تصویب doc پارامتر rule یا attr.*() . برای توابع کمکی و ماکروها، استفاده از یک رشته مستندساز سه به نقل از اللفظی زیر فرمت داده شده در اینجا . توابع اجرای قانون معمولاً نیازی به مستندسازی خاص خود ندارند.

استفاده از لفظ رشته ای در مکان های مورد انتظار، استخراج اسناد را برای ابزار خودکار آسان تر می کند. احساس رایگان برای استفاده نظرات غیر رشته استاندارد در هر کجا که ممکن است خواننده از کد خود را کمک کند.