اینها برخی از مسائل و سؤالات رایج در مورد پسوندهای نوشتن هستند.
چرا فایل من تولید نمی شود / عمل من هرگز اجرا نمی شود؟
بازل تنها اقدامات مورد نیاز برای تولید فایل های خروجی درخواست اجرا می کند.
اگر فایل شما می خواهید یک برچسب، شما می توانید آن را به طور مستقیم درخواست:
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.*()
. برای توابع کمکی و ماکروها، استفاده از یک رشته مستندساز سه به نقل از اللفظی زیر فرمت داده شده در اینجا . توابع اجرای قانون معمولاً نیازی به مستندسازی خاص خود ندارند.
استفاده از لفظ رشته ای در مکان های مورد انتظار، استخراج اسناد را برای ابزار خودکار آسان تر می کند. احساس رایگان برای استفاده نظرات غیر رشته استاندارد در هر کجا که ممکن است خواننده از کد خود را کمک کند.