package
Hàm package
khai báo siêu dữ liệu áp dụng cho tất cả các quy tắc trong một gói (tệp BUILD). Mỗi tệp BUILD chỉ có thể sử dụng hàm này một lần. Hàm repo()
trong tệp REPO.bazel
thực hiện chức năng tương tự cho toàn bộ kho lưu trữ. Việc gọi package()
nên được thực hiện ngay sau các câu lệnh load()
và trước các quy tắc khác.
Kết Quả Của Biểu Thức: Hàm này không trả về giá trị trực tiếp, nhưng nó ảnh hưởng đến thuộc tính mặc định của các quy tắc trong gói, bao gồm default_visibility
, default_deprecation
, default_package_metadata
, và default_testonly
.
package(default_deprecation, default_package_metadata, default_testonly, default_visibility, features)
Đối số
Thuộc tính | Mô tả |
---|---|
default_applicable_licenses |
Bí danh cho default_package_metadata . |
default_visibility |
Danh sách nhãn; mặc định là [] . Xác định mức độ hiển thị mặc định cho các mục tiêu quy tắc cấp cao nhất và macro tượng trưng trong gói. Thuộc tính này sẽ bị bỏ qua nếu mục tiêu hoặc macro chỉ định giá trị visibility riêng. Để biết thông tin chi tiết về cú pháp của thuộc tính này, hãy xem tài liệu về khả năng hiển thị. Chế độ hiển thị mặc định của gói không áp dụng cho exports_files, thuộc chế độ công khai theo mặc định. |
default_deprecation |
Chuỗi; mặc định là "" . Đặt thông báo deprecation mặc định cho tất cả quy tắc trong gói này. |
default_package_metadata |
Danh sách nhãn; mặc định là [] . Đặt danh sách mặc định gồm các mục tiêu siêu dữ liệu áp dụng cho tất cả các mục tiêu khác trong gói. Đây thường là các mục tiêu liên quan đến gói OSS và nội dung khai báo giấy phép. Hãy xem rules_license để biết ví dụ. |
default_testonly |
Boolean; mặc định là False trừ phi có ghi chú. Đặt thuộc tính testonly mặc định cho tất cả các quy tắc trong gói này. Trong các gói thuộc javatests , giá trị mặc định là True . |
features |
Danh sách chuỗi; mặc định là [] . Đặt nhiều cờ ảnh hưởng đến ngữ nghĩa của tệp BUILD này. Tính năng này chủ yếu được những người làm việc trên hệ thống xây dựng sử dụng để gắn thẻ các gói cần xử lý theo cách đặc biệt. Đừng sử dụng tính năng này trừ phi có người làm việc trên hệ thống xây dựng yêu cầu rõ ràng. |
Ví dụ
package(default_visibility = ["//foo:target"])
Đoạn mã trên thiết lập các quy tắc trong gói này chỉ hiển thị cho các thành viên của nhóm gói //foo:target
.
package_group
Hàm package_group
định nghĩa một tập hợp các gói và liên kết một nhãn với tập hợp đó, thường được sử dụng để kiểm soát chế độ hiển thị. Một gói được coi là thuộc nhóm nếu nó khớp với thuộc tính packages
hoặc nằm trong một trong các nhóm gói được liệt kê trong thuộc tính includes
.
Kết quả của biểu thức: Tạo ra một mục tiêu (target) có thể được sử dụng trong thuộc tính visibility
của các quy tắc khác.
package_group(name, packages, includes)
Đối số
Thuộc tính | Mô tả |
---|---|
name |
Tên; bắt buộc. Tên duy nhất cho mục tiêu này. |
packages |
Danh sách chuỗi; mặc định là [] . Danh sách có thể trống hoặc chứa một hoặc nhiều thông số kỹ thuật của gói. Mỗi chuỗi có thể ở một trong các dạng sau: tên đầy đủ của gói, tên gói với hậu tố /... (chỉ định gói đó và tất cả gói con), hoặc chuỗi public hoặc private . |
includes |
Danh sách nhãn; mặc định là [] . Các nhóm gói khác có trong nhóm này. Nhãn trong thuộc tính này phải tham chiếu đến các nhóm gói khác. Các gói trong nhóm gói được tham chiếu được coi là một phần của nhóm gói này. |
Ví dụ
package_group(
name = "tropical",
packages = [
"//fruits/mango",
"//fruits/orange",
"//fruits/papaya/...",
],
)
Đoạn mã trên định nghĩa một nhóm gói có tên “tropical” bao gồm các gói chứa thông tin về xoài, cam và đu đủ.
exports_files
Hàm exports_files()
chỉ định danh sách các tệp thuộc gói hiện tại có thể được truy cập từ các gói khác. Điều này cần thiết để các gói khác có thể tham chiếu trực tiếp đến các tệp nguồn trong gói này.
Kết quả của biểu thức: Không trả về giá trị trực tiếp. Thay vào đó, nó làm cho các tệp được liệt kê có thể nhìn thấy được từ các gói khác, tuân theo các hạn chế về chế độ hiển thị đã chỉ định.
exports_files([<i>label</i>, ...], visibility, licenses)
Đối số
Đối số là danh sách tên tệp trong gói hiện tại. Bạn có thể chỉ định một nội dung khai báo chế độ hiển thị; nếu không, mọi gói đều có thể thấy các tệp. Bạn cũng có thể chỉ định giấy phép.
Ví dụ:
# from //test_data/BUILD
exports_files(["golden.txt"])
Đoạn mã trên xuất tệp golden.txt
từ gói test_data
, cho phép các gói khác sử dụng nó.
glob
Hàm glob
tìm tất cả các tệp phù hợp với một hoặc nhiều mẫu đường dẫn nhất định và trả về một danh sách các đường dẫn mới, có thể thay đổi và được sắp xếp. glob
chỉ tìm kiếm các tệp trong gói chứa nó và chỉ tìm các tệp nguồn (không phải tệp được tạo).
Kết quả của biểu thức: Trả về một danh sách các đường dẫn tệp. Danh sách này có thể được sử dụng trong các thuộc tính như srcs
hoặc data
của các quy tắc khác.
glob(include, exclude=[], exclude_directories=1, allow_empty=True)
Đối số
Thuộc tính | Mô tả |
---|---|
include |
Danh sách các mẫu đường dẫn để bao gồm. |
exclude |
Danh sách các mẫu đường dẫn để loại trừ; mặc định là [] . |
exclude_directories |
Boolean; mặc định là 1. Nếu đúng, các thư mục sẽ bị loại trừ khỏi kết quả. |
allow_empty |
Boolean; mặc định là True . Nếu sai, hàm sẽ báo lỗi nếu không tìm thấy tệp nào khớp. |
Ví dụ
java_library(
name = "mylib",
srcs = glob(["*.java"]) + [":gen_java_srcs"],
deps = "...",
)
genrule(
name = "gen_java_srcs",
outs = [
"Foo.java",
"Bar.java",
],
...
)
Hình ảnh minh họa cấu trúc cây thư mục với các tệp .java và thư mục con, thể hiện cách biểu thức glob tìm kiếm và trả về danh sách các tệp phù hợp.
Đoạn mã trên tạo một thư viện Java từ tất cả các tệp Java trong thư mục hiện tại và các tệp do quy tắc :gen_java_srcs
tạo ra.
chọn
Hàm select()
là một hàm trợ giúp cho phép thuộc tính của một quy tắc được cấu hình, nghĩa là giá trị của thuộc tính có thể thay đổi tùy thuộc vào các cờ dòng lệnh Bazel.
Kết quả của biểu thức: Trả về một giá trị duy nhất (ví dụ: một danh sách các chuỗi, một chuỗi, một boolean) dựa trên các điều kiện cấu hình được chỉ định.
select(
{
conditionA: valuesA,
conditionB: valuesB,
...
},
no_match_error = "custom message"
)
Đối số
Đối số đầu tiên là một từ điển ánh xạ các điều kiện cấu hình (nhãn tham chiếu đến config_setting
hoặc constraint_value
) với các giá trị tương ứng. //conditions:default
là một nhãn đặc biệt khớp nếu không có điều kiện nào khác khớp. no_match_error
là một tham số tùy chọn để tùy chỉnh thông báo lỗi nếu không có điều kiện nào phù hợp.
Ví dụ
sh_binary(
name = "mytarget",
srcs = select({
":conditionA": ["mytarget_a.sh"],
":conditionB": ["mytarget_b.sh"],
"//conditions:default": ["mytarget_default.sh"]
})
)
Hình ảnh minh họa cách các điều kiện trong hàm select
được đánh giá để chọn danh sách tệp nguồn (srcs
) phù hợp cho mục tiêu sh_binary
.
Đoạn mã trên làm cho thuộc tính srcs
của sh_binary
có thể định cấu hình. Giá trị của srcs
sẽ là một trong các danh sách tệp dựa trên điều kiện nào khớp.
subpackages
Hàm subpackages()
liệt kê các gói con trực tiếp của gói đang tải, sử dụng các mẫu đường dẫn tương tự như glob()
.
Kết quả của biểu thức: Trả về một danh sách các đường dẫn (chuỗi) đến các gói con.
subpackages(include, exclude=[], allow_empty=True)
Đối số
Thuộc tính | Mô tả |
---|---|
include |
Danh sách các mẫu đường dẫn để bao gồm. |
exclude |
Danh sách các mẫu đường dẫn để loại trừ; mặc định là [] . |
allow_empty |
Boolean; mặc định là True . Nếu sai, hàm sẽ báo lỗi nếu không tìm thấy gói con nào khớp. |
Ví dụ
# The following BUILD files exist:
# foo/BUILD
# foo/bar/baz/BUILD
# foo/bar/but/bad/BUILD
# foo/sub/BUILD
# foo/sub/deeper/BUILD
#
# In foo/BUILD a call to
subs1 = subpackages(include = ["**"])
# results in subs1 == ["sub", "bar/baz", "bar/but/bad"]
Đoạn mã trên, khi được thực thi trong foo/BUILD
, sẽ trả về danh sách các gói con trực tiếp của foo
.