Chia sẻ biến

Báo cáo vấn đề Xem nguồn Nightly · 7.4 .

Tệp BUILD được thiết kế để đơn giản và mang tính khai báo. Các tệp này thường bao gồm một loạt các nội dung khai báo mục tiêu. Khi cơ sở mã và tệp BUILD của bạn lớn hơn, bạn có thể nhận thấy một số nội dung trùng lặp, chẳng hạn như:

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

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

Thông thường, việc trùng lặp mã trong tệp BUILD là không có vấn đề gì. Điều này có thể giúp tệp dễ đọc hơn: bạn có thể đọc và hiểu từng phần khai báo mà không cần ngữ cảnh. Điều này rất quan trọng, không chỉ đối với con người mà còn đối với các công cụ bên ngoài. Ví dụ: một công cụ có thể đọc và cập nhật các tệp BUILD để thêm các phần phụ thuộc bị thiếu. Việc tái cấu trúc mã và sử dụng lại mã có thể ngăn chặn loại sửa đổi tự động này.

Nếu việc chia sẻ giá trị hữu ích (ví dụ: nếu phải đồng bộ hoá các giá trị), bạn có thể giới thiệu một biến:

COPTS = ["-DVERSION=5"]

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

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

Giờ đây, nhiều nội dung khai báo sẽ sử dụng giá trị COPTS. Theo quy ước, hãy sử dụng chữ cái viết hoa để đặt tên cho hằng số toàn cục.

Chia sẻ biến trên nhiều tệp BUILD

Nếu cần chia sẻ một giá trị trên nhiều tệp BUILD, bạn phải đặt giá trị đó vào một tệp .bzl. Tệp .bzl chứa các định nghĩa (biến và hàm) có thể được sử dụng trong tệp BUILD.

Trong path/to/variables.bzl, hãy viết:

COPTS = ["-DVERSION=5"]

Sau đó, bạn có thể cập nhật tệp BUILD để truy cập vào biến:

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