סקירה כללית של התוספים

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

תוספות Bazel מסתיימות בקבצים המסתיימים ב-.bzl. שימוש ב הצהרת טעינה כדי לייבא סמל מתוסף.

לפני שתלמדו את המושגים המתקדמים יותר, תחילה עליכם:

פקודות מאקרו וכללים

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

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

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

מודל ההערכה

Build מורכב משלושה שלבים.

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

  • שלב Analysis. קוד הכללים מתבצע (הפונקציה implementation ) והפעולות נוצרות באופן מיידי. פעולה מתארת כיצד ליצור קבוצת פלטים מתוך ערכת קלט, כגון "run gcc on hello.c and get hello.o". עליכם לרשום במפורש אילו קבצים ייווצרו לפני ביצוע הפקודות בפועל. במילים אחרות, שלב הניתוח לוקח את התרשים שנוצר על ידי שלב הטעינה ויוצר תרשים פעולה.

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

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

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

יצירת תוספים

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

להגיע רחוק יותר

בנוסף לפקודות מאקרו ולכללים, מומלץ לכתוב דרישות וכללי מאגר.