به اشتراک گذاری متغیرها

فایل‌های 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"],
)