BazelCon 2022 מגיע בין 16 ל-17 בנובמבר לניו יורק באינטרנט.
הירשמו עוד היום!

הגדרות נפוצות

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

המקטע הזה מגדיר מונחים וקונספטים נפוצים נפוצים לפונקציות רבות או לכללי בנייה.

תוכן עניינים

אסימונים של מעטפת בורנית

מאפייני מחרוזת מסוימים של כללים מסוימים מחולקים למספר מילים לפי כללי האסימון של המעטפת בבורן: רווחים מוקפים במירכאות מפרידים בין מילים נפרדות, ותווים עם גרש בודד ומירכאות כפולות כדי למנוע זאת של מונטיזציה.

המאפיינים האלה כפופים לאסימון הזה, והם מצוינים באופן מפורש בהגדרות שלהם במסמך הזה.

מאפיינים כפופים להרחבה של המשתנה 'Make' (אמצע) ואסימון של מעטפת Bourne משמשים בדרך כלל להעברת אפשרויות שרירותיות למהדרים וכלים אחרים. דוגמאות למאפיינים כאלה הן cc_library.copts ו-java_library.javacopts. השילוב של השינויים האלה מאפשר למשתנה מחרוזת יחיד להתרחב לרשימה ספציפית של מילות אפשרות.

הרחבת תווית

חלק מהמאפיינים של מעט מאוד כללים כפופים להרחבת תוויות: אם המחרוזות האלה כוללות תווית חוקית כמחרוזת משנה, כמו //mypkg:target, והתווית הזו היא דרישה מוקדמת מוצהרת עבור כלל נוכחי, הוא מורחב לשם הנתיב של הקובץ שמיוצג על ידי target //mypkg:target.

מאפיינים לדוגמה: genrule.cmd ו-cc_binary.linkopts. הפרטים עשויים להשתנות באופן משמעותי בכל מקרה, בסוגיות כאלה, למשל: האם תוויות יחסיות מורחבים. אופן הטיפול בתוויות שמתרחבות למספר קבצים וכו'. לקבלת פרטים, יש לעיין בתיעוד של מאפייני הכלל.

מאפיינים אופייניים שהוגדרו על ידי רוב כללי ה-build

בקטע הזה מתוארים מאפיינים שמוגדרים על ידי כללי build רבים, אבל לא את כולם.

מאפיין תיאור
data

List of labels ; optional

הקבצים דרושים על ידי הכלל הזה בזמן הריצה. עשוי לכלול יעדים של קבצים או של כללים. באופן כללי, מאפשר כל יעד.

פלטי ברירת המחדל וקובצי הריצה של יעדים במאפיין data צריכים להופיע באזור *.runfiles של כל קובץ הפעלה שפועל לפי יעד זה או תלוי בו בזמן ריצה. ייתכן שהמערכת תכללו קובצי נתונים או קבצים בינאריים שנעשה בהם שימוש כשמפעילים את srcs היעד. בקטע תלויים בנתונים אפשר למצוא מידע נוסף על האופן שבו ניתן להסתמך על קובצי נתונים ולהשתמש בהם.

כללים חדשים צריכים להגדיר מאפיין data אם הם מעבדים קלט שעשוי להשתמש בקלט אחר בזמן הריצה. פונקציות ההטמעה של הכללים חייבות גםאכלס את קובצי הרצה של היעד מהפלט ומקובצי ההפעלה של כלdata , וגם קובצי הרצה מכל מאפיין תלוי שמספק קוד מקור או יחסי תלות בזמן ריצה.

deps

List of labels ; optional

יחסי תלות ביעד הזה. בדרך כלל יש לפרט רק יעדי כללים. (למרות שכללים מסוימים מאפשרים רישום של קבצים ישירות ב-deps, מומלץ להימנע מכך ככל שניתן).

כללים ספציפיים לשפה מגבילים בדרך כלל את היעדים הרשומים לאלו שיש להם ספקים ספציפיים.

הסמנטיקה המדויקת של המשמעות של יעד תלויה באחר, באמצעות deps, היא ספציפית לסוג הכלל, והתיעוד הספציפי לכלל מפורט יותר. עבור כללים שמעבדים את קוד המקור, deps מציין בדרך כלל יחסי תלות של קוד שבהם הקוד משתמש srcs.

ברוב המקרים, תלות ב-deps משמשת כדי לאפשר למודול אחד להשתמש בסמלים שמוגדרים במודול אחר שנכתבו באותה שפת תכנות. אפשר להשתמש גם בשפות שונות במקרים רבים: לדוגמה, יעד מסוג java_library עשוי להיות תלוי בקוד C++ ביעד cc_library על ידי פרסום הפרמטר השני deps. מידע נוסף זמין בהגדרה של תלויות.

licenses

List of strings; optional; nonconfigurable

רשימה של מחרוזות מסוג רישיון שישמשו ביעד הספציפי הזה. זהו חלק מ-API של רישיון שהוצא משימוש, ו-Bazel כבר לא משתמשת בו. אל תשתמשו בה.

srcs

List of labels ; optional

קבצים שעובדו או נכללים בכלל הזה. לרוב, הקבצים רשומים באופן ישיר, אבל ייתכן שהם יכללו יעדים של הכללים (כמו filegroup או genrule) כדי לכלול את פלטי ברירת המחדל שלהם.

לרוב, כללים ספציפיים לשפה מחייבים שהקבצים הרשומים כוללים סיומות קובץ מסוימות.

מאפיינים המשותפים לכל כללי ה-build

בקטע הזה מתוארים מאפיינים שנוספו באופן מפורש לכל כללי ה-build.

מאפיין תיאור
compatible_with

List of labels ; optional; nonconfigurable

רשימה של סביבות שאפשר לבנות את היעד שלהן, בנוסף לסביבות נתמכות כברירת מחדל.

זהו חלק ממערכת האילוצים של Bazel, שמאפשרת למשתמשים להצהיר על אילו יעדים יכולים להיות תלויים זה בזה. לדוגמה, קבצים בינאריים חיצוניים לא תלויים בספריות עם קוד סודי של חברה. פרטים נוספים זמינים ב-ConstraintSemantcs.

deprecation

String; optional; nonconfigurable

הודעת אזהרה המסבירה את היעד הזה. בדרך כלל משתמשים בקטגוריה הזו כדי להודיע למשתמשים שיעד מסוים מיושן, או שהוא הוחלף על ידי כלל אחר, הוא פרטי בחבילה או עשוי להיחשב כמזיק מסיבה כלשהי. מומלץ לכלול קובץ עזר כלשהו (למשל דף אינטרנט, מספר באג או מזהי CL לדוגמה) כדי{/1} שיהיה קל לדעת אילו שינויים נדרשים כדי להימנע מההודעה. אם יש יעד חדש שיכול לשמש כירידה במקום החלפת המוצר, כדאי להעביר רק את כל המשתמשים ביעד הישן.

למאפיין הזה אין השפעה על אופן הבנייה של פריטים, אבל הוא יכול להשפיע על פלט האבחון של הכלי לבניית גרסאות. הכלי ליצירת גרסאות שולח אזהרה כשכלל עם מאפיין deprecation תלוי ביעד בחבילה אחרת.

יחסי תלות בתוך חבילה פטורים מאזהרה זו, כך שלדוגמה, בניית הבדיקות של כלל שהוצא משימוש לא נתקלה באזהרה.

אם יעד שהוצא משימוש תלוי ביעד אחר שהוצא משימוש, לא תפורסם הודעת אזהרה.

לאחר שהאנשים יפסיקו להשתמש בו, ניתן להסיר את היעד.

distribs

List of strings; optional; nonconfigurable

רשימת מחרוזות של שיטת הפצה שישמשו ליעד הספציפי הזה. זהו חלק מ-API של רישיון שהוצא משימוש, ו-Bazel כבר לא משתמשת בו. אל תשתמשו בה.

exec_compatible_with

List of labels ; optional; nonconfigurable

רשימה של constraint_values שחייבת להיות בפלטפורמת ההפעלה של היעד הזה. זאת בנוסף לאילוצים שכבר הוגדרו על ידי סוג הכלל. מגבלות משמשות להגבלת הרשימה של פלטפורמות ביצוע זמינות. לפרטים נוספים, ניתן לעיין בתיאור הפתרון של כלי הרשת.

exec_properties

Dictionary of strings; optional

מילון מחרוזות שיתווסף אל exec_properties של הפלטפורמה שנבחרה ליעד הזה. יש לעיין בexec_properties של כלל הפלטפורמה.

אם מפתח קיים גם בפלטפורמה וגם ברמת היעד, הערך יילקח מהיעד.

features

List of feature strings; optional

תכונה היא תג מחרוזת שניתן להפעיל או להשבית ביעד. המשמעות של תכונה תלויה בכלל עצמו.

מאפיין features זה משולב עם מאפיין ה חבילה ברמת features. לדוגמה, אם התכונות ["a", "b"] מופעלות ברמת החבילה, והמאפיין features של היעד מכיל את ["-a", "c"], התכונות הופעלו עבור הכלל "b" ו-"c". יש לעיין בדוגמה.

restricted_to

List of labels ; optional; nonconfigurable

ניתן ליצור את רשימת הסביבות עבור היעד הזה, במקום עבור סביבות שנתמכות כברירת מחדל.

זהו חלק ממערכת האילוצים של Bazel. פרטים נוספים ב-compatible_with.

tags

List of strings; optional; nonconfigurable

ניתן להשתמש בתגים בכל כלל. תגים בבדיקה וכללי test_suite שימושיים לסיווג הבדיקות. תגים ביעדים שאינם בדיקות משמשים לשליטה בביצוע ארגז חול של פעולות genrule ו Starlark ועבור על ידי בודקים אנושיים ו/או כלים חיצוניים.

Bazel משנה את התנהגות קוד ארגז החול שלה אם היא מוצאת את מילות המפתח הבאותtags של כל בדיקה, אוgenrule או המקשים שלexecution_requirements לכל פעולה של Starlark.

  • no-sandbox מילות מפתח מובילות לפעולה או לבדיקה אף פעם לא בארגז חול; עדיין ניתן לשמור אותו במטמון או להפעיל אותו מרחוק – יש להשתמש ב-no-cache או ב-no-remote כדי למנוע את שתי הפעולות האלה או את שתיהן.
  • no-cache מילות מפתח מובילות לפעולה או לבדיקה אף פעם לא נשמרות במטמון (באופן מרוחק או מקומי)
  • no-remote-cache מילות מפתח מובילות לפעולה או לבדיקה ואף פעם לא נשמרות במטמון מרחוק (אבל יכול להיות שהן נשמרות במטמון באופן מקומי, וייתכן שהן יבוצעו גם מרחוק). הערה: למטרות התג הזה, מטמון הדיסק נחשב למטמון מקומי, אבל המטמון של http ו-gRPC נחשבים מרוחקים. אם צוין מטמון משולב (כלומר, מטמון עם רכיבים מקומיים ומרוחקים), הוא ייחשב כמטמון מרוחק ויושבת לחלוטין, אלא אם יוגדר --incompatible_remote_results_ignore_disk במקרה כזה ייעשה שימוש ברכיבים המקומיים.
  • מילת מפתח אחת (no-remote-exec) תגרום לפעולה או לבדיקה אף פעם לא להתבצע מרחוק (אבל ייתכן שהיא תישמר במטמון מרחוק).
  • מילת מפתח אחת (no-remote) מונעת ביצוע של הפעולה או הבדיקה מרחוק או שמירה במטמון מרחוק. מצב זה מקביל לשימוש ללא מטמון ולא בשלט רחוק.
  • מילת מפתח אחת (local) מונעת את הפעולה או את הבדיקה לשמירה במטמון, ביצוע מרחוק או הפעלה בתוך ארגז החול. בכל הנוגע לכללים ולבדיקות, לסימון הכלל באמצעות המאפיין local = True יש את אותה השפעה.
  • מילת המפתח requires-network מאפשרת גישה לרשת החיצונית מתוך ארגז החול. תג זה ייכנס לתוקף רק אם ארגז חול יופעל.
  • מילת מפתח אחת (block-network) חוסמת את הגישה אל הרשת החיצונית מתוך ארגז החול. במקרה כזה, רק תקשורת עם localhost מותרת. תג זה ייכנס לתוקף רק אם ארגז חול יופעל.
  • requires-fakeroot מפעיל את הבדיקה או את הפעולה כ-uid ו-gid 0 (כלומר, משתמש הבסיס). הוא נתמך רק ב-Linux. התג הזה מקבל עדיפות על פני האפשרות בשורת הפקודה של --sandbox_fake_username.

תגים בבדיקות משמשים בדרך כלל להוספת הערות לגבי תפקיד הבדיקה בתהליך ניפוי הבאגים והשחרור. בדרך כלל, תגים שימושיים ביותר לבדיקות C++ ו-Python, שלא יכולות לראות הערות בזמן ריצה. השימוש בתגים וברכיבי הגודל מאפשר גמישות ביצירת חבילות בדיקות שמבוססות על מדיניות הצ'ק-אין של קוד הבסיס.

Bazel משנה את אופן הפעולה של הבדיקה אם היא מוצאת את מילות המפתח הבאות במאפיין tags של כלל הבדיקה:

  • exclusive יאלץ את הבדיקה לפעול במצב "בלעדי", כדי לוודא שלא מתבצעות בדיקות נוספות בו-זמנית. בדיקות כאלה יבוצעו באופן סידורי לאחר השלמת כל פעילות ה-build ובדיקות לא בלעדיות. ההפעלה מרחוק מושבתת בבדיקות כאלה כי ל-Bazel אין שליטה על מה שפועל במחשב מרוחק.
  • מילת מפתח אחת (manual) תחריג את היעד מההרחבה של תווים כלליים לחיפוש של יעד (..., :*, :all וכו') ו-test_suite כללים שלא מופיעים ברשימה הבדיקה מפורשת כאשר מחשבים את קבוצת היעדים ברמה העליונה לצורך הרצה/הפעלה של פקודות build, test ו-coverage. היא לא משפיעה על הרחבת תו כללי לחיפוש או על הרחבת הבדיקה בהקשרים אחרים, כולל הפקודה query. חשוב לשים לב ש-manual לא מרמז על כך שאין צורך לבנות או להפעיל יעד באופן אוטומטי באמצעות מערכות מתמשך של בנייה/בדיקה. לדוגמה, ייתכן שתרצו להחריג יעדbazel test ... מכיוון שנדרשים סימונים ספציפיים ב-Bazel, אבל הם עדיין נכללים בבדיקות מוגדר מראש או בבדיקות רציפות שהוגדרו באופן תקין.
  • מילת מפתח אחת (external) תאלץ ביצוע בדיקה ללא תנאי (ללא קשר לערך --cache_test_results).
ניתן לעיין בנוגע לתגים באנציקלופדיה לבדיקה כדי לצפות למוסכמות נוספות לגבי תגים שמצורפים ליעדי בדיקה.
target_compatible_with

List of labels ; optional

רשימה של constraint_value שצריך לכלול בפלטפורמת היעד כדי שהיעד הזה יהיה תואם. זאת בנוסף למגבלות שכבר מוגדרות על ידי סוג הכלל. אם פלטפורמת היעד לא עומדת בכל המגבלות המפורטות, היעד נחשב כלא תואם. כשתבנית היעד מורחבת, אפשר לדלג על יעדים לא תואמים (למשל, //..., :all). כאשר מצוין במפורש על שורת הפקודה, יעדים לא תואמים גורמים ל-Bazel להדפיס שגיאה ולגרום לכשל בבנייה או בדיקה.

יעדים שתלויים באופן זמני ביעדים לא תואמים עצמם נחשבים ליעדים שאינם תואמים. המערכת מדלגת עליהם גם לבנייה ולבדיקה.

רשימה ריקה (ברירת המחדל) מציינת שהיעד תואם לכל הפלטפורמות.

כל הכללים מלבד כללי Workspace תומכים במאפיין הזה. עבור כללים מסוימים, למאפיין הזה אין השפעה. לדוגמה: ציון target_compatible_with עבור cc_toolchain אינו מועיל.

בדף פלטפורמות ניתן למצוא מידע נוסף על דילוג על יעדים לא תואמים.

testonly

Boolean; optional; default False except for test and test suite targets; nonconfigurable

אם הערך הוא True, רק יעדים לבדיקה בלבד (כגון בדיקות) עשויים להיות תלויים ביעד הזה.

באופן שווה, כלל שאינו testonly אינו תלוי בכל כלל שאינו testonly.

הבדיקות (*_test כללים) וחבילות הבדיקה (כללי test_Suite) הן testonly כברירת מחדל.

מאפיין זה מיועד לכך שהיעד אינו מכיל נתונים בינאריים שהושקו בסביבת הייצור.

מאחר שהבדיקה נאכפת רק בזמן הבנייה, ולא בזמן הריצה, והיא מרחיבה את התוכן באופן וירטואלי באמצעות עץ התלות, יש להחיל אותה בצורה חכמה. לדוגמה, מסמכי מידע (stub) וזיוף שמועילים לבדיקות יחידה, עשויים להיות שימושיים גם לבדיקות אינטגרציה שכוללות את אותם קבצים בינאריים שיושקו בסביבת הייצור, וסביר להניח שהם לא יסומנו לבדיקה בלבד. הנתונים. לעומת זאת, כללים שיש בהם סכנה לקישור

toolchains

List of labels ; optional; nonconfigurable

קבוצת היעדים שאפשר להגדיר משתנים שאליהם היעד הזה מורשה לגשת. היעדים האלה הם מופעים של כללים שמספקים TemplateVariableInfo או יעדים מיוחדים עבור סוגי הכלים המובנים ב-Bazel. למשל:

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

לתשומת ליבך, זה שונה מהקונספט של רזולוציה של Toolchain המשמשת להטמעה של כללים לתצורה התלויה בפלטפורמה. לא ניתן להשתמש במאפיין הזה כדי לקבוע איזה סוגcc_toolchain או לערךjava_toolchain יעד.

visibility

List of labels ; optional; default default_visibility from package if specified, or //visibility:private otherwise; nonconfigurable

המאפיין visibility ביעד קובע אם אפשר להשתמש ביעד בחבילות אחרות. מידע נוסף זמין בחשיפה.

מאפיינים המשותפים לכל כללי הבדיקה (*_test)

המקטע הזה מתאר מאפיינים המשותפים לכל כללי הבדיקה.

מאפיין תיאור
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization

ארגומנטים בשורת הפקודה ש-Bazel מעבירה ליעד כאשר היא מופעלת עם bazel test.

הארגומנטים האלה מועברים לפני ערכי --test_arg שצוינו בשורת הפקודה של bazel test.

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

המדיניות מציינת משתני סביבה נוספים להגדרה כאשר הבדיקה מבוצעת על ידי bazel test.

מאפיין זה חל רק על כללים מותאמים, כגון cc_test, py_test ו-sh_test. הוא לא חל על כללי בדיקה בהגדרת Starlark. מאפיין זה חל רק על כללים מותאמים, כגון cc_test, py_test ו-sh_test. הוא לא חל על כללי בדיקה שהוגדרו באמצעות Starlark. אפשר להוסיף מאפיין "env" לשימוש בכללים ב-Starstark ולהשתמש בהם כדי לאכלס TestEnvironment ספק.

env_inherit

List of strings; optional

המדיניות מציינת משתני סביבה נוספים שיורשים מהסביבה החיצונית כאשר הבדיקה מתבצעת על ידי bazel test.

מאפיין זה חל רק על כללים מותאמים, כגון cc_test, py_test ו-sh_test. הוא לא חל על כללי בדיקה בהגדרת Starlark.

size

String "enormous", "large" "medium" or "small", default is "medium"; optional; nonconfigurable

מציין את "כבדות" הבדיקה: כמה זמן/משאבים היא צריכה להריץ.

בדיקות יחידה נחשבות "קטנות", בדיקות שילוב "בינוניות" ובדיקות מקצה לקצה "גדולות" או "גדולות". Bazel משתמשת בגודל לקביעת זמן קצוב לתפוגה המוגדר כברירת מחדל, שניתן לביטול באמצעות המאפיין timeout. כשהבדיקה מתבצעת באופן מקומי, size משמש גם למטרות תזמון: Bazel מנסה לכבד את --local_{ram,cpu}_resources ולא להציף את המכונה המקומית על ידי הפעלת בדיקות רבות בו-זמנית.

גודלי הבדיקה תואמים לתפוגות הזמן הקצוב המוגדרות כברירת מחדל, ולשימושים מסוימים במשאב המקומי:

גודל RAM (ב-MB) מעבד (במעבדי ליבה) ברירת מחדל לזמן קצוב
small 20 1 קצרה (דקה)
בינונית 100 1 בינוני (5 דקות)
large 300 1 ארוך (15 דקות)
עצום 800 1 קבוע (60 דקות)

משתנה הסביבה TEST_SIZE יוגדר לערך של המאפיין הזה בזמן יצירת הבדיקה.

timeout

String "short", "moderate", "long", "eternal" (with the default derived from the test's size attribute); nonconfigurable

משך הזמן הצפוי לבדיקה לפני החזרה.

למרות שמאפיין המידה של בדיקה קובע את הערכת המשאב, ייתכן שהזמן הקצוב לתפוגה של הבדיקה יוגדר באופן עצמאי. אם לא צוין במפורש, הזמן הקצוב לתפוגה מבוסס על גודל הבדיקה. הזמן הקצוב לתפוגה ניתן לביטול באמצעות התכונה הניסיונית --test_timeout, למשל, במקרה של הרצה בתנאים מסוימים, איטית. בדיקת הערכים של הזמן הקצוב לתפוגה תואם לתקופות הזמן הבאות:

ערך של זמן קצוב לתפוגה תקופת זמן
סרטון קצר דקה אחת
מתון 5 דקות
long 15 דקות
קבוע 60 דקות

במועדים אחרים מלבד אלה שתוארו, אפשר לבטל את הזמן הקצוב לתפוגה של הבדיקה עם הסימון המקורי ב--test_timeout, למשל אם הפעלתם אותו באופן ידני בתנאים שידוע לנו שהם איטיים. ערכי --test_timeout מופיעים בשניות. לדוגמה, --test_timeout=120 תגדיר את הזמן הקצוב לתפוגה של בדיקה לשתי דקות.

משתנה הסביבה TEST_TIMEOUT יוגדר לזמן הקצוב לתפוגה של הבדיקה (בשניות) בעת שליחת הבדיקה.

flaky

Boolean; optional; default False; nonconfigurable

סימון כבדיקה פתיתית.

אם הבדיקה מוגדרת, היא מבצעת עד שלוש פעמים, והיא מסומנת כ'נכשל' רק אם היא נכשלה בכל פעם. כברירת מחדל, המאפיין הזה מוגדר ל-False והבדיקה מתבצעת רק פעם אחת. הערה: בדרך כלל לא מומלץ להשתמש במאפיין הזה. בדיקות צריכות לעבור בצורה אמינה כאשר הטענות שלהן מעודכנות.

shard_count

Non-negative integer less than or equal to 50; optional

מציין את מספר הפיצולים המקבילים כדי להריץ את הבדיקה.

הערך הזה יבטל את ההיוריסטיקה שמשמשת כדי לקבוע את מספר השברים המקבילים שאיתם רוצים להריץ את הבדיקה. הערה: עבור חלק מכללי הבדיקה, ייתכן שהפרמטר הזה יידרש כדי להפעיל פיצול מלכתחילה. מידע נוסף זמין ב---test_sharding_strategy.

אם האפשרות לפיצול הבדיקה מופעלת, משתנה הסביבה TEST_TOTAL_SHARDS יוגדר לערך הזה בזמן יצירת הבדיקה.

הפיצול מחייב שהרצת הבדיקה תתמוך בפרוטוקול פיצול הבדיקה. אם אין תמיכה, סביר להניח שהיא תריץ כל בדיקה בכל פיצול, וזה לא מה שרציתם.

פרטים נוספים על פיצול הניסוי זמינים באנציקלופדיה לבדיקה.

local

Boolean; default False; nonconfigurable

מאלצת את הפעלת הניסוי באופן מקומי, ללא ארגז חול.

אם מגדירים את הערך הזה כ-True, צריך לציין את הערך "local" כתג (tags=["local"]).

מאפיינים המשותפים לכל הכללים הבינאריים (*_binary)

המקטע הזה מתאר מאפיינים המשותפים לכל הכללים הבינאריים.

מאפיין תיאור
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization; nonconfigurable

ארגומנטים על שורת פקודה ש-Bazel תעביר ליעד כאשר היא מופעלת על ידי הפקודה run, או כבדיקה. הארגומנטים האלה מועברים לפני הארגומנטים שצוינו בשורת הפקודה bazel run או bazel test.

הערה: הארגומנטים לא מועברים כאשר מפעילים את היעד מחוץ ל-Bazel (לדוגמה, על ידי ביצוע ידני של הקובץ הבינארי ב-bazel-bin/.

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

המדיניות מציינת משתני סביבה נוספים להגדרה כאשר היעד מופעל על ידי bazel run.

מאפיין זה חל רק על כללים מותאמים, כגון cc_binary, py_binary ו-sh_binary. הוא לא חל על כללי הפעלה שהוגדרו על ידי Starlark.

הערה: משתני הסביבה לא מוגדרים כשמפעילים את היעד מחוץ ל-Bazel (לדוגמה, על ידי ביצוע ידני של הקובץ הבינארי ב-bazel-bin/.

output_licenses

List of strings; optional

הרישיונות של קובצי הפלט שהקובץ הבינארי הזה יוצר. זהו חלק מ-API של רישיון שהוצא משימוש, ו-Bazel כבר לא משתמשת בו. אל תשתמשו בה.

מאפיינים שניתן להגדיר

רוב המאפיינים הם "ניתנים להגדרה", כלומר, הערכים שלהם עשויים להשתנות כשהיעד מובנה בדרכים שונות. באופן ספציפי, מאפיינים הניתנים להגדרה עשויים להשתנות בהתאם לסימונים המועברים לשורת הפקודה של Bazel, או בהתאם לתלויות במורד הזרם שמבקשים את היעד. ניתן להשתמש בכך, למשל, כדי להתאים אישית את היעד למספר פלטפורמות או מצבי הידור.

הדוגמה הבאה מצהירה על מקורות שונים לארכיטקטורות יעד שונות. אם האפליקציה bazel build :multiplatform_lib --cpu x86 תבנה את היעד באמצעות x86_impl.cc, וההחלפה של --cpu arm תגרום לכך שהיא תשתמש ב-arm_impl.cc.

cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)

הפונקציה select() בוחרת מתוך ערכים חלופיים שונים למאפיין שניתן להגדרה על סמך config_setting או constraint_value הקריטריונים שתואמים להגדרת התצורה של היעד.

Bazel מבצעת הערכה של מאפיינים ניתנים להגדרה לאחר עיבוד פקודות מאקרו ולפני כללי עיבוד (טכנית, בין שלבי הטעינה והניתוח). כל עיבוד שמתבצע לפני ההערכה של select() לא מאפשר לדעת איזה סניף בוחר ב-select(). רכיבי מאקרו, לדוגמה, לא יכולים לשנות את ההתנהגות שלהם על סמך הסניף שנבחר, ו-bazel query יכול רק לבצע ניחושים שמרניים לגבי התלות שניתן להגדיר את היעד. ניתן לעיין בשאלות הנפוצות האלה כדי לקבל מידע נוסף על השימוש ב-select() עם כללים ופקודות מאקרו.

במאפיינים שמסומנים בתיעוד של nonconfigurable לא ניתן להשתמש בתכונה הזו. לרוב לא ניתן להגדיר מאפיין כי ב-Bazel פנימי צריך לדעת את הערך שלו כדי לקבוע איך לפתור select().

סקירה מפורטת מפורטת זמינה בקטע מאפייני build שניתן להגדיר.

יעדי פלט מרומזים

פלטים מרומזים ב- C+ + הוצאו משימוש. עליך להימנע משימוש בה בשפות אחרות, ככל האפשר. עדיין אין לנו נתיב שהוצא משימוש אבל בסופו של דבר הם ייצאו משימוש.

כשמגדירים כלל ליצירת קובץ BUILD, יש להצהיר במפורש על יעד חדש כלל בעל שם בחבילה. פונקציות רבות של כללי Build מתייחסות גם באופן מפורש ליעד אחד או יותר של קובץ פלט, שהתוכן והמשמעות שלו ספציפיים לכלל. לדוגמה, כשמצהירים במפורש על כלל java_binary(name='foo', ...), צריך גם להצהיר במפורש על קובץ פלט כיעד foo_deploy.jar כחברה באותה חבילה הנתונים. (היעד הספציפי הזה הוא ארכיון עצמאי של Java שמתאים לפריסה).

יעדים של פלט מרומז הם חברים ברמה ראשונה בתרשים היעד הגלובלי. בדיוק כמו יעדים אחרים, הם נוצרים על פי דרישה בין אם הם מצוינים בפקודה הבנויה ברמה העליונה או כאשר הם נדרשים לצורך יעדים אחרים. אפשר להתייחס אליהם כתלויים בקובצי BUILD, וניתן לתעד אותם בפלט של כלי הניתוח, כמו bazel query.

התיעוד של כל סוג של כלל מבנה מכיל קטע מיוחד המפרט את השמות והתוכן של כל פלט מרומז הכרוך בהצהרה על כלל כזה.

הבחנה חשובה אך קלה במידה מסוימת, בין שני מרחבי השמות שבהם משתמשת מערכת ה-build: תוויות מזהות יעדים, שעשויים להיות כללים או קבצים, ויעדי הקבצים יכולים להתחלק ליעדי קבצים של מקור (או של קלט) ולמטרות של קובץ נגזר (או פלט). אלה הפריטים שאפשר לאזכר בקובצי BUILD, לבנות משורת הפקודה או לבדוק באמצעות bazel query. זהו מרחב השמות של היעד. כל יעד קובץ תואם לקובץ אחד בפועל בדיסק ("מרחב השמות של מערכת הקבצים"); כל יעד של כלל יכול להתאים לאפס, קובץ אחד או יותר בפועל בדיסק. ייתכן שיהיו קבצים בדיסק שאין להם יעד תואם; לדוגמה, לא ניתן להפנות ל-.o קובצי אובייקטים שנוצרו במהלך הידור C++ מתוך קובצי BUILD או משורת הפקודה. באופן כזה, כלי היצירה עשוי להסתיר פרטים מסוימים של ההטמעה לגבי אופן הפעולה שלו. הסבר מפורט יותר בהסבר על הקונספט של BUILD.