Phần này sẽ đi sâu vào các khái niệm và thuật ngữ quan trọng liên quan đến tương tác từ trong Bazel, một hệ thống xây dựng mã nguồn mở. Chúng ta sẽ khám phá các thuộc tính phổ biến, quy tắc xây dựng và cách chúng tương tác với nhau.
Mã hoá mã thông báo shell Bourne
Một số thuộc tính chuỗi trong Bazel chịu sự mã hoá Bourne shell. Điều này có nghĩa là các dấu cách không được trích dẫn sẽ phân tách các từ, trong khi dấu ngoặc đơn, dấu ngoặc kép và dấu gạch chéo ngược được sử dụng để ngăn chặn việc tạo mã thông báo. Các thuộc tính này thường được sử dụng để truyền các tùy chọn tùy ý cho trình biên dịch và các công cụ khác.
Ví dụ: cc_library.copts
và java_library.javacopts
là các thuộc tính thường sử dụng tính năng này.
Mở rộng nhãn
Một số thuộc tính chuỗi trong Bazel phải tuân theo việc mở rộng nhãn. Nếu các chuỗi này chứa một nhãn hợp lệ (ví dụ: //mypkg:target
), nhãn đó sẽ được mở rộng thành đường dẫn của tệp được biểu thị bởi mục tiêu //mypkg:target
, miễn là nhãn đó là một điều kiện tiên quyết đã khai báo của quy tắc hiện tại.
Ví dụ: genrule.cmd
và cc_binary.linkopts
là các thuộc tính thường sử dụng tính năng này.
Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định
Phần này mô tả các thuộc tính được xác định bởi nhiều quy tắc bản dựng, nhưng không phải tất cả.
Thuộc tính | Mô tả |
---|---|
data |
Danh sách các tệp mà quy tắc này cần trong thời gian chạy. |
deps |
Các phần phụ thuộc cho mục tiêu này. |
licenses |
Danh sách các chuỗi loại giấy phép sẽ được sử dụng cho mục tiêu cụ thể này. |
srcs |
Các tệp được quy tắc này xử lý hoặc đưa vào. |
Để hiểu rõ hơn về cách các thuộc tính này tương tác, hãy xem xét ví dụ sau:
alt
: Các thuộc tính phổ biến trong Bazel: data
cho các tệp thời gian chạy, deps
cho các phần phụ thuộc, licenses
cho thông tin cấp phép và srcs
cho các tệp nguồn.
Các thuộc tính phổ biến cho tất cả quy tắc bản dựng
Phần này mô tả các thuộc tính được thêm ngầm vào tất cả các quy tắc xây dựng.
Thuộc tính | Mô tả |
---|---|
compatible_with |
Danh sách các môi trường có thể tạo mục tiêu này, ngoài các môi trường được hỗ trợ mặc định. |
deprecation |
Thông báo cảnh báo liên quan đến mục tiêu này. |
exec_compatible_with |
Danh sách các môi trường thực thi tương thích với mục tiêu này. |
exec_group_compatible_with |
Từ điển các nhóm thực thi và môi trường thực thi tương thích. |
exec_properties |
Từ điển các thuộc tính thực thi cho mục tiêu này. |
features |
Danh sách các tính năng có thể được bật hoặc tắt trên một mục tiêu. |
package_metadata |
Danh sách siêu dữ liệu liên kết với mục tiêu này. |
restricted_to |
Danh sách các môi trường có thể tạo mục tiêu này, thay vì các môi trường được hỗ trợ mặc định. |
tags |
Danh sách các thẻ có thể được sử dụng để phân loại và kiểm soát hành vi của quy tắc. |
target_compatible_with |
Danh sách các môi trường mục tiêu tương thích với mục tiêu này. |
testonly |
Chỉ các mục tiêu testonly (chẳng hạn như kiểm thử) mới có thể phụ thuộc vào mục tiêu này. |
toolchains |
Tập hợp các mục tiêu có Biến tạo mà mục tiêu này được phép truy cập. |
visibility |
Kiểm soát xem các mục tiêu ở vị trí khác có thể phụ thuộc vào mục tiêu hay không. |
Việc sử dụng các thuộc tính này cho phép bạn kiểm soát và tùy chỉnh quá trình xây dựng, đảm bảo rằng mục tiêu của bạn được xây dựng và kiểm tra một cách chính xác trong các môi trường khác nhau.
Các thuộc tính chung cho tất cả quy tắc kiểm thử (*_test)
Phần này mô tả các thuộc tính phổ biến cho tất cả quy tắc kiểm thử.
Thuộc tính | Mô tả |
---|---|
args |
Các đối số dòng lệnh mà Bazel truyền đến mục tiêu khi mục tiêu đó được thực thi bằng bazel test . |
env |
Chỉ định các biến môi trường bổ sung cần đặt khi bazel test thực thi kiểm thử. |
env_inherit |
Chỉ định các biến môi trường bổ sung để kế thừa từ môi trường bên ngoài khi bazel test thực thi kiểm thử. |
size |
Chỉ định “độ nặng” của mục tiêu kiểm thử. |
timeout |
Thời gian dự kiến để chạy kiểm thử trước khi trả về. |
flaky |
Đánh dấu kiểm thử là không ổn định. |
shard_count |
Chỉ định số lượng phân đoạn song song để sử dụng khi chạy kiểm thử. |
local |
Buộc chạy kiểm thử cục bộ mà không cần hộp cát. |
Các thuộc tính này cho phép bạn kiểm soát cách các bài kiểm tra của bạn được chạy, bao gồm cả các đối số dòng lệnh, biến môi trường và thời gian chờ.
alt
: Các thuộc tính phổ biến của quy tắc kiểm thử Bazel: args
cho đối số, env
cho biến môi trường, size
cho độ nặng của kiểm thử và timeout
cho thời gian chờ kiểm thử.
Các thuộc tính chung cho tất cả quy tắc nhị phân (*_binary)
Phần này mô tả các thuộc tính phổ biến cho tất cả quy tắc nhị phân.
Thuộc tính | Mô tả |
---|---|
args |
Các đối số dòng lệnh mà Bazel sẽ truyền đến mục tiêu khi mục tiêu đó được thực thi bằng lệnh run hoặc dưới dạng kiểm thử. |
env |
Chỉ định các biến môi trường bổ sung cần đặt khi mục tiêu được bazel run thực thi. |
output_licenses |
Giấy phép của các tệp đầu ra mà tệp nhị phân này tạo ra. |
Thuộc tính có thể định cấu hình
Hầu hết các thuộc tính đều “có thể định cấu hình”, nghĩa là giá trị của các thuộc tính này có thể thay đổi khi mục tiêu được tạo theo nhiều cách. Bạn có thể sử dụng tính năng này để tùy chỉnh mục tiêu cho nhiều nền tảng hoặc chế độ biên dịch. Hàm select()
chọn trong số các giá trị thay thế khác nhau.
Ví dụ, bạn có thể sử dụng select()
để chọn các tệp nguồn khác nhau dựa trên kiến trúc mục tiêu:
cc_library(
name = "multiplatform_lib",
srcs = select({
":x86_mode": ["x86_impl.cc"],
":arm_mode": ["arm_impl.cc"],
})
)
config_setting(
name = "x86_mode",
values = {"cpu": "x86"}
)
config_setting(
name = "arm_mode",
values = {"cpu": "arm"}
)
Mục tiêu đầu ra ngầm ẩn
Khi xác định quy tắc bản dựng, bạn đang khai báo rõ ràng một mục tiêu quy tắc mới. Nhiều hàm quy tắc bản dựng cũng ngầm ẩn bao gồm một hoặc nhiều mục tiêu tệp đầu ra, nội dung và ý nghĩa của các mục tiêu này là dành riêng cho quy tắc. Ví dụ: khi khai báo rõ ràng một quy tắc java_binary(name='foo', ...)
bạn cũng ngầm ẩn khai báo mục tiêu tệp đầu ra foo_deploy.jar
.