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

7.3 · 7.2 · 7.1 · 7.0 · 6.5

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