הנה כמה בעיות נפוצות ומענה על שאלות הקשורות בכתיבת תוספים.
למה הקובץ שלי לא נוצר / הפעולה שלי מעולם לא בוצעה?
Bazel מבצעת רק את הפעולות הנדרשות כדי ליצור את קובצי הפלט המבוקשים.
אם הקובץ הרצוי מכיל תווית, אפשר לבקש אותו ישירות:
bazel build //pkg:myfile.txt
אם הקובץ נמצא בקבוצת פלט של היעד, ייתכן שיהיה צורך לציין את קבוצת הפלט הזו בשורת הפקודה:
bazel build //pkg:mytarget --output_groups=foo
אם ברצונך ליצור את הקובץ באופן אוטומטי בכל פעם שהיעד שלך מוזכר בשורת הפקודה, הוסף אותו לפלט ברירת המחדל של הכלל על ידי החזרת ספק
DefaultInfo
.
מידע נוסף זמין בדף הכללים.
למה פונקציית ההטמעה שלי לא הופעלה?
Bazel מנתחת רק את היעדים הנדרשים ל-build. צריך לתת שם ליעד בשורה או משהו שתלוי ביעד.
קובץ חסר כשהפעולה שלי או הקובץ הבינארי מופעל
חשוב לוודא ש-1) הקובץ נרשם כקלט לפעולה או בינארי, וגם 2) לסקריפט או לכלי שמתבצע יש גישה לקובץ באמצעות הנתיב הנכון.
כדי לבצע פעולות, צריך להצהיר על קלט על ידי העברתן אל הפונקציה ctx.actions.*
שיוצרת את הפעולה. הנתיב המתאים לקובץ ניתן להשיג באמצעות
File.path
.
עבור קבצים בינאריים (פלטי ההרצה שמופעלים על ידי פקודת bazel run
או bazel test
,} אתם מצהירים על קלט על ידי הכללתם בקובצי הריצה. במקום להשתמש בשדה path
, השתמשו ב-
File.short_path
, שהוא נתיב הקובץ ביחס לספריית ה-runקבצים שבה הבינארי מופעל.
איך אפשר לקבוע אילו קבצים נבנו על ידי bazel build //pkg:mytarget
?
השתמש בתגDefaultInfo
ספק ל:הגדרת פלט ברירת המחדל הנתונים.
איך אוכל להפעיל תוכנית או להגיש I/O כחלק מה-build?
ניתן להצהיר על כלי כיעד, בדיוק כמו כל חלק אחר של ה-build, ולהפעיל אותו במהלך שלב הביצוע כדי לסייע בבניית יעדים אחרים. כדי ליצור פעולה
שמפעילה כלי, השתמשו ב-ctx.actions.run
והזינו בכלי את הפרמטר executable
.
במהלך שלבי הטעינה והניתוח, הכלי לא יכול לפעול, ואין אפשרות לבצע I/O בקובץ. משמעות הדבר היא שכלים ותכני קבצים (למעט תוכן של קובצי BUILD ו- .bzl) לא יכולים להשפיע על אופן היצירה של תרשימי היעד ותרשימי הפעולה.
מה אם עליי לגשת לאותם נתונים מובנים גם לפני שלב הביצוע וגם במהלכו?
אפשר לעצב את הנתונים המוב asנים כקובץ .bzl ניתן load()
לגשת לקובץ
בשלבי הטעינה והניתוח. ניתן להעביר אותו כקלט או להריץ
לפעולות ולקובצי הפעלה שצריכים לעבור את שלב הביצוע.
כיצד עליי לתעד את קוד Starlark?
עבור כללים ומאפייני כללים, ניתן להעביר ליטרל docstring (עם מירכאות משולשות)doc
פרמטר שלrule
אוattr.*()
הנתונים. לקבלת פונקציות
ופקודות מאקרו, יש להשתמש בליטרל docstring בעל שלוש עלויות לפי הפורמט
המפורט כאן.
ברוב המקרים, לא צריך להשתמש ב-docstring משלו עבור פונקציות של יישום כללים.
שימוש במיתר מילולי במקומות הצפויים מאפשר לחלץ כלים אוטומטית לחילוץ תיעוד. תמיד אפשר להשתמש בתגובות רגילות שאינן מחרוזת בכל מקום שבו הן עוזרות לקורא של הקוד.