वैरिएबल शेयर करना

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"],
)