שיתוף משתנים

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

cc_library(
  name = "foo",
  copts = ["-DVERSION=5"],
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = ["-DVERSION=5"],
  srcs = ["bar.cc"],
  deps = [":foo"],
)

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

אם כדאי לשתף ערכים (לדוגמה, אם יש לסנכרן ערכים), תוכל להציג משתנה:

COPTS = ["-DVERSION=5"]

cc_library(
  name = "foo",
  copts = COPTS,
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = COPTS,
  srcs = ["bar.cc"],
  deps = [":foo"],
)

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

שיתוף משתנים בין קובצי BUILD מרובים

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

בpath/to/variables.bzl, כותבים:

COPTS = ["-DVERSION=5"]

לאחר מכן, אפשר לעדכן את קובצי BUILD כדי לגשת למשתנה:

load("//path/to:variables.bzl", "COPTS")

cc_library(
  name = "foo",
  copts = COPTS,
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = COPTS,
  srcs = ["bar.cc"],
  deps = [":foo"],
)