בקטעים הקודמים מתוארות חבילות, יעדים ותוויות, ותרשים התלות בבניית המוצר מופשט. הקטע הזה מתאר את תחביר הבטון המשמש להגדרת חבילה.
מעצם הגדרתה, כל חבילה מכילה קובץ BUILD
, שהוא תוכנית קצרה. קובצי BUILD
מוערכים באמצעות שפת ציבור,
Starlark.
הם מוצגים כרשימה רציפה של הצהרות.
באופן כללי, הסדר חשוב: יש להגדיר משתנים לפני השימוש בהם, לדוגמה. עם זאת, רוב הקבצים של BUILD
מכילים רק הצהרות של כללי בנייה, והסדר היחסי של ההצהרות האלה הוא חסר משמעות. כל מה שחשוב הוא אילו כללים הוצהרו, ובאילו ערכים, הושלמה הערכת החבילה לפי זמן.
כשמתבצעת פונקציה של כלל build, כמו cc_library
, היא יוצרת יעד חדש בתרשים. ניתן להפנות ליעד זה מאוחר יותר באמצעות תווית.
בקובצי BUILD
פשוטים, אפשר לשנות את הסדר של הצהרות הכללים באופן חופשי בלי לשנות את ההתנהגות.
כדי לאפשר הפרדה נקייה בין קוד לנתונים, קובצי BUILD
לא יכולים להכיל הגדרות של פונקציות, for
הצהרות או if
הצהרות (אבל מותר להשתמש בהסברים ובניסוחים מהרשימה if
). במקום זאת, אפשר להצהיר על פונקציות ב-.bzl
קבצים. בנוסף, לא ניתן להשתמש בארגומנטים *args
ו-**kwargs
ב-BUILD
קבצים, צריך לפרט את כל הארגומנטים במפורש.
באופן עיקרי, תוכניות ב-Starlark אינן יכולות לבצע שרירות בלתי שרירותיות. יכולת הפירוש של הקובץ
הופכת את הפרשנות של קבצים מסוג BUILD
למבנה פנימי – היא תלויה רק בקבוצת קלטים ידועה. פעולה זו חיונית כדי לוודא שהפעולות משוחזרות.
מידע נוסף זמין במאמר נגישות.
יש לכתוב BUILD
קבצים רק באמצעות תווי ASCII. עם זאת, מבחינה טכנית, הם מפורשים באמצעות קבוצת התווים Latin-1.
כי צריך לעדכן קובצי BUILD
בכל פעם שתלויים בקוד של קוד הבסיס. בדרך כלל הם מתוחזקים על ידי כמה אנשים בצוות. מחברי הקבצים ב-BUILD
צריכים להגיב באופן פומבי כדי לתעד את התפקיד של כל יעד build, בין אם הוא מיועד לשימוש ציבורי ובין אם לא, וכדי לתעד את תפקיד החבילה עצמה.
מתבצעת טעינה של תוסף
תוספי Bazel הם קבצים שמסתיימים ב-.bzl
. השתמשו בהצהרה load
כדי לייבא
סמל מתוסף.
load("//foo/bar:file.bzl", "some_library")
הקוד הזה טוען את הקובץ foo/bar/file.bzl
ומוסיף את הסמל some_library
לסביבה. אפשר להשתמש בו כדי לטעון כללים, פונקציות או קבועים חדשים
(לדוגמה, מחרוזת או רשימה). אפשר לייבא כמה סמלים באמצעות ארגומנטים נוספים לקריאה ל-load
. הארגומנטים חייבים להיות ליטרים של מחרוזת
(ללא משתנה) והצהרות load
חייבות להופיע ברמה העליונה — הן לא יכולות להיות בגוף פונקציה.
הארגומנט הראשון של load
הוא תווית שמזהה קובץ .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
, לא ניתן לייצא סמלים שמתחילים ב-_
ולא ניתן לטעון אותם מקובץ אחר.
אפשר להשתמש בחשיפה לטעינה כדי להגביל מי יכול לטעון קובץ .bzl
.
סוגים של כללי build
רוב כללי ה-build מקובצים יחד לפי משפחות, לפי שפה. לדוגמה, cc_binary
, cc_library
ו-cc_test
הם כללי Build לבינאריים, ספריות ובדיקות C+, בהתאמה. לכל שפה יש שם שונה, עם קידומת שונה, כמו java_*
ל-Java. חלק מהפונקציות האלה מתועדות ב-Enciclopedia, אבל כל אחד יכול ליצור כללים חדשים.
*_binary
כללים בונים תוכניות הפעלה בשפה נתונה. אחרי הבנייה, קובץ ההפעלה יופיע בכלי לבניית נתונים בינאריים של הכלי המתאים, בשם המתאים לתווית של כלל, כך ש-//my:program
יופיע (למשל)$(BINDIR)/my/program
.בשפות מסוימות, הספרייה מכילה גם קובצי runrun שמכילים את כל הקבצים המוזכרים במאפיין
data
, או כל כלל בסגירת יחסי תלות שלו. קבוצת הקבצים הזו מרוכזת במקום אחד כדי לאפשר פריסה בקלות בסביבת ייצור.*_test
כללים הם התמחות של כלל מסוג*_binary
, המשמש לבדיקה אוטומטית. בדיקות הן פשוט תוכניות שמחזירות תוצאות ללא הצלחה.כמו קבצים בינאריים, גם בבדיקות יש עצי ריצה, והקבצים שמתחתיו הם הקבצים היחידים שהבדיקה עשויה להיפתח בצורה חוקית בזמן ריצה. לדוגמה, תוכנית
cc_test(name='x', data=['//foo:bar'])
עשויה לפתוח ולקרוא את$TEST_SRCDIR/workspace/foo/bar
במהלך הביצוע. (לכל שפת תכנות יש פונקציית שירות משלה לגישה לערך של$TEST_SRCDIR
, אבל כולם מקבילים לשימוש במשתנה הסביבה באופן ישיר). אי-ציות לכלל עלול לגרום לכשל בבדיקה כאשר הוא מופעל במארח בדיקה מרחוק.*_library
כללים מציינים מודולים שנוצרו בנפרד, בשפת תכנות נתונה. ספריות יכולות להיות תלויות בספריות אחרות, ובינאריים ובדיקות יכולים להיות תלויים בספריות, תוך התנהגות ההתנהגות הנפרדת הצפויה.
תוויות | יחסי תלות |