XÂY DỰNG các tệp

Báo cáo vấn đề Nightly · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Các phương thức có trong tệp BUILD. Ngoài ra, hãy xem Bách khoa toàn thư về bản dựng để biết thêm về các hàm và quy tắc xây dựng khác, cũng có thể dùng trong tệp BUILD.

Hội viên

phần tách rời

depset depset(direct=None, order="default", *, transitive=None)

Tạo một tập hợp. Tham số direct là danh sách các phần tử trực tiếp của nhóm phần phụ thuộc và tham số transitive là danh sách các nhóm phần phụ thuộc mà các phần tử của nhóm này trở thành phần tử gián tiếp của nhóm phần phụ thuộc đã tạo. Thứ tự các phần tử được trả về khi phần tách được chuyển đổi thành danh sách được chỉ định bằng tham số order. Hãy xem Tổng quan về phần phụ thuộc để biết thêm thông tin.

Tất cả các phần tử (trực tiếp và gián tiếp) của một tập hợp phải thuộc cùng một kiểu, như thu được trong biểu thức type(x).

Vì tập hợp dựa trên hàm băm được dùng để loại bỏ các bản sao trong quá trình lặp, nên tất cả phần tử của một tập hợp đều có thể băm. Tuy nhiên, bất biến này hiện không được kiểm tra một cách nhất quán trong tất cả các hàm khởi tạo. Sử dụng cờ --incompatible_always_check_depset_elements để bật tính năng kiểm tra nhất quán; đây sẽ là hành vi mặc định trong các bản phát hành sau này; xem Vấn đề 10313.

Ngoài ra, các phần tử hiện phải không thể thay đổi, mặc dù quy định hạn chế này sẽ được nới lỏng trong tương lai.

Thứ tự của phần phụ thuộc được tạo phải tương thích với thứ tự của các phần phụ thuộc transitive. Đơn đặt hàng "default" tương thích với mọi đơn đặt hàng khác, tất cả các đơn đặt hàng khác chỉ tương thích với chính đơn đặt hàng đó.

Thông số

Thông số Mô tả
direct trình tự; hoặc None; mặc định là None
Danh sách các phần tử trực tiếp của một depset.
order string; giá trị mặc định là "default"
Chiến lược truyền tải cho phần phụ thuộc mới. Hãy xem tại đây để biết các giá trị có thể có.
transitive trình tự của nhóm phần phụ thuộc; hoặc None; mặc định là None
Danh sách các nhóm phần phụ thuộc có phần tử sẽ trở thành phần tử gián tiếp của nhóm phần phụ thuộc.

existing_rule

unknown existing_rule(name)

Trả về một đối tượng giống lệnh chính tả không thể thay đổi mô tả các thuộc tính của một quy tắc được tạo thực thể trong gói của luồng này hoặc None nếu không có thực thể quy tắc nào có tên đó.

Ở đây, một đối tượng dạng ký tự không thể thay đổi có nghĩa là một đối tượng không thể thay đổi sâu rộng x hỗ trợ lặp lại theo dạng nhập chính tả, len(x), name in x, x[name], x.get(name), x.items(), x.keys()x.values().

Kết quả chứa một mục cho mỗi thuộc tính, ngoại trừ các thuộc tính riêng tư (tên không bắt đầu bằng một chữ cái) và một số loại thuộc tính cũ không thể hiển thị. Ngoài ra, lệnh chính tả còn chứa các mục nhập cho namekind của thực thể quy tắc (ví dụ: 'cc_binary').

Các giá trị của kết quả đại diện cho các giá trị thuộc tính như sau:

  • Các thuộc tính thuộc loại str, int và bool được biểu thị như hiện có.
  • Nhãn được chuyển đổi thành chuỗi có dạng ':foo' cho các mục tiêu trong cùng một gói hoặc '//pkg:name' cho các mục tiêu trong một gói khác.
  • Các danh sách được biểu thị dưới dạng bộ dữ liệu (tuple) và các lệnh chính tả (dicts) được chuyển đổi thành các lệnh chính tả mới, có thể thay đổi. Các phần tử của chúng được chuyển đổi đệ quy theo cùng một cách.
  • Các giá trị select được trả về với nội dung được chuyển đổi như mô tả ở trên.
  • Các thuộc tính không có giá trị nào được chỉ định trong quá trình tạo quy tắc và có giá trị mặc định được tính sẽ bị loại trừ khỏi kết quả. (Không thể tính toán các giá trị mặc định đã tính cho đến giai đoạn phân tích.).

Nếu có thể, chỉ sử dụng hàm này trong hàm triển khai của macro biểu tượng của trình kết thúc quy tắc. Bạn không nên sử dụng chức năng này trong các ngữ cảnh khác và sẽ bị tắt trong bản phát hành Bazel trong tương lai; nó làm cho các tệp BUILD dễ vỡ và phụ thuộc vào thứ tự. Ngoài ra, hãy lưu ý rằng biến này khác với hai lượt chuyển đổi khác của các giá trị thuộc tính quy tắc từ biểu mẫu nội bộ đến Starlark: một lượt chuyển đổi được sử dụng theo giá trị mặc định đã tính toán và lượt chuyển đổi còn lại được ctx.attr.foo sử dụng.

Thông số

Thông số Mô tả
name string; bắt buộc
Tên của mục tiêu.

existing_rules

unknown existing_rules()

Trả về một đối tượng giống như tập hợp không thể thay đổi mô tả các quy tắc đã được tạo bản sao trong gói của luồng này. Mỗi mục của đối tượng giống như tập hợp từ điển sẽ liên kết tên của thực thể quy tắc với kết quả mà existing_rule(name) trả về.

Ở đây, một đối tượng dạng ký tự không thể thay đổi có nghĩa là một đối tượng không thể thay đổi sâu rộng x hỗ trợ lặp lại theo dạng nhập chính tả, len(x), name in x, x[name], x.get(name), x.items(), x.keys()x.values().

Nếu có thể, hãy chỉ sử dụng hàm này trong các hàm triển khai của macro tượng trưng cho trình hoàn tất quy tắc. Bạn không nên sử dụng hàm này trong các ngữ cảnh khác và hàm này sẽ bị vô hiệu hoá trong bản phát hành Bazel trong tương lai; hàm này khiến tệp BUILD trở nên dễ hỏng và phụ thuộc vào thứ tự.

exports_files

None exports_files(srcs, visibility=None, licenses=None)

Chỉ định danh sách các tệp thuộc gói này được xuất sang các gói khác.

Thông số

Thông số Mô tả
srcs trình tự các chuỗi; bắt buộc
Danh sách tệp cần xuất.
visibility sequence; hoặc None; giá trị mặc định là None
Bạn có thể chỉ định nội dung khai báo về chế độ hiển thị. Tệp sẽ hiển thị cho các mục tiêu được chỉ định. Nếu bạn không chỉ định chế độ hiển thị, thì mọi gói đều có thể thấy các tệp đó.
licenses trình tự của chuỗi; hoặc None; mặc định là None
Giấy phép sẽ được chỉ định.

glob

sequence glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

Glob trả về một danh sách mới, có thể thay đổi, được sắp xếp cho mọi tệp trong gói hiện tại:
  • Khớp với ít nhất một mẫu trong include.
  • Không khớp với bất kỳ mẫu nào trong exclude (mặc định là []).
Nếu bạn bật đối số exclude_directories (đặt thành 1), thì các tệp thuộc loại thư mục sẽ bị bỏ qua khỏi kết quả (mặc định là 1).

Thông số

Thông số Mô tả
include trình tự của chuỗi; mặc định là []
Danh sách các mẫu cụm cầu cần đưa vào.
exclude trình tự của chuỗi; mặc định là []
Danh sách các mẫu cụm cầu cần loại trừ.
exclude_directories int; mặc định là 1
Cờ cho biết có loại trừ thư mục hay không.
allow_empty giá trị mặc định là unbound
Liệu chúng ta có cho phép các mẫu toàn cầu để không khớp không có giá trị nào. Nếu `allow_Empty` có trạng thái False, thì mỗi mẫu bao gồm riêng lẻ phải khớp với nội dung nào đó và kết quả cuối cùng không được để trống (sau khi các kết quả trùng khớp của mẫu `loại trừ` bị loại trừ).

module_name

string module_name()

Tên của mô-đun Bazel liên kết với kho lưu trữ chứa gói này. Nếu gói này là từ một kho lưu trữ được xác định trong WORKSPACE thay vì MODULE.bazel, thì gói này sẽ trống. Đối với các kho lưu trữ do các tiện ích mô-đun tạo, đây là tên của mô-đun lưu trữ tiện ích. Trường này giống với trường module.name mà bạn thấy trong module_ctx.modules. Có thể trả về None.

module_version

string module_version()

Phiên bản của mô-đun Bazel liên kết với kho lưu trữ chứa gói này. Nếu gói này là từ một kho lưu trữ được xác định trong WORKSPACE thay vì MODULE.bazel, thì bạn sẽ trống. Đối với các kho lưu trữ do tiện ích mô-đun tạo, đây là phiên bản của mô-đun lưu trữ tiện ích. Trường này giống với trường module.version mà bạn thấy trong module_ctx.modules. Có thể trả về None.

package_group

None package_group(name, packages=[], includes=[])

Hàm này xác định một tập hợp các gói và chỉ định nhãn cho nhóm. Bạn có thể tham chiếu nhãn trong các thuộc tính visibility.

Thông số

Thông số Mô tả
name string; bắt buộc
Tên duy nhất cho quy tắc này.
packages trình tự của chuỗi; mặc định là []
Liệt kê đầy đủ các gói trong nhóm này.
includes trình tự của chuỗi; mặc định là []
Các nhóm gói khác được bao gồm trong mục này.

package_name

string package_name()

Tên của gói đang được đánh giá, không có tên kho lưu trữ. Ví dụ: trong tệp BUILD some/package/BUILD, giá trị của tệp này sẽ là some/package. Nếu tệp BUILD gọi một hàm được xác định trong tệp .bzl, thì package_name() sẽ khớp với gói tệp BUILD của phương thức gọi.

package_relative_label

Label package_relative_label(input)

Chuyển đổi chuỗi đầu vào thành đối tượng Label (Nhãn) trong ngữ cảnh của gói đang được khởi chạy (tức là tệp BUILD mà macro hiện tại đang thực thi). Nếu giá trị đầu vào đã là Label, thì giá trị này sẽ được trả về mà không thay đổi.

Bạn chỉ có thể gọi hàm này trong khi đánh giá tệp BUILD và các macro mà hàm này gọi trực tiếp hoặc gián tiếp; bạn không thể gọi hàm này trong (ví dụ) hàm triển khai quy tắc.

Kết quả của hàm này là giá trị Label giống như giá trị được tạo bằng cách truyền chuỗi đã cho đến thuộc tính có giá trị nhãn của một mục tiêu được khai báo trong tệp BUILD.

Lưu ý về cách sử dụng: Điểm khác biệt giữa hàm này và Label()Label() sử dụng ngữ cảnh của gói tệp .bzl đã gọi hàm này, chứ không phải gói tệp BUILD. Sử dụng Label() khi bạn cần tham chiếu đến một mục tiêu cố định được mã hoá cứng vào macro, chẳng hạn như một trình biên dịch. Sử dụng package_relative_label() khi bạn cần chuẩn hoá chuỗi nhãn do tệp BUILD cung cấp cho đối tượng Label. (Không có cách nào để chuyển đổi chuỗi thành Label trong ngữ cảnh gói khác ngoài tệp BUILD hoặc tệp .bzl đang gọi. Vì lý do đó, macro bên ngoài phải luôn ưu tiên truyền đối tượng Nhãn vào macro bên trong thay vì chuỗi nhãn.)

Thông số

Thông số Mô tả
input string; hoặc Label; bắt buộc
Chuỗi nhãn đầu vào hoặc đối tượng Nhãn. Nếu đối tượng Nhãn được truyền, đối tượng đó sẽ được trả về nguyên trạng.

repo_name

string repo_name()

Tên chuẩn của kho lưu trữ chứa gói đang được đánh giá, không có dấu @ ở đầu.

repository_name

string repository_name()

Thử nghiệm. API này đang trong giai đoạn thử nghiệm và có thể thay đổi bất cứ lúc nào. Vui lòng đừng phụ thuộc vào tính năng này. Bạn có thể bật tính năng này trên cơ sở thử nghiệm bằng cách đặt --+incompatible_enable_deprecated_label_apis
Không dùng nữa. Thay vào đó, hãy sử dụng repo_name. Kiểu này không chứa dấu @ dẫn đầu giả mạo nhưng hoạt động giống hệt như vậy.

Tên chuẩn hoá của kho lưu trữ chứa gói hiện đang được đánh giá, với một ký hiệu @ (@) được đặt ở đầu. Ví dụ: trong các gói được gọi là tồn tại theo khổ WORKSPACE local_repository(name='local', path=...), thì gói này sẽ được đặt thành @local. Trong các gói thuộc kho lưu trữ chính, thuộc tính này sẽ được thiết lập thành @.

chọn

unknown select(x, no_match_error='')

select() là hàm trợ giúp giúp thuộc tính quy tắc có thể định cấu hình. Hãy xem phần tạo bách khoa toàn thư để biết thông tin chi tiết.

Thông số

Thông số Mô tả
x dict; bắt buộc
Một dict ánh xạ các điều kiện cấu hình đến các giá trị. Mỗi khoá là một Nhãn hoặc một chuỗi nhãn xác định một thực thể config_setting hoặc constraint_value. Hãy xem tài liệu về macro để biết thời điểm sử dụng Nhãn thay vì chuỗi.
no_match_error string; giá trị mặc định là ''
Lỗi tuỳ chỉnh (không bắt buộc) cần báo cáo nếu không có điều kiện nào khớp.

gói con

sequence subpackages(include, exclude=[], allow_empty=False)

Trả về một danh sách mới có thể thay đổi của mọi gói con trực tiếp của gói hiện tại, bất kể chiều sâu thư mục hệ thống tệp. Danh sách được trả về được sắp xếp và chứa tên của các gói con liên quan đến gói hiện tại. Bạn nên sử dụng các phương thức trong mô-đun bazel_skylib.subpackages thay vì gọi trực tiếp hàm này.

Thông số

Thông số Mô tả
include trình tự của chuỗi; bắt buộc
Danh sách các mẫu cầu cầu cần đưa vào khi quét gói con.
exclude trình tự của chuỗi; mặc định là []
Danh sách các mẫu cầu cầu cần loại trừ khỏi quá trình quét gói con.
allow_empty bool; mặc định là False
Liệu chúng ta có thất bại nếu lệnh gọi trả về danh sách trống hay không. Theo mặc định, danh sách trống cho biết lỗi tiềm ẩn trong tệp BUILD, trong đó lệnh gọi đến subpackages() là thừa. Nếu bạn đặt thành true, thì hàm này có thể thành công trong trường hợp đó.