Site icon donghochetac

Nội dung nào sau đây là một phần của Bazel BUILD?

Trong thế giới phát triển phần mềm, việc xây dựng và quản lý các dự án lớn đòi hỏi một hệ thống xây dựng mạnh mẽ và linh hoạt. Bazel, một hệ thống xây dựng mã nguồn mở, cung cấp một giải pháp toàn diện để quản lý các dự án phức tạp. Bài viết này sẽ đi sâu vào các hàm quan trọng trong tệp BUILD của Bazel, tập trung vào những chức năng chính và cách chúng định hình quá trình xây dựng.

package

Hàm package đóng vai trò trung tâm trong việc 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 chỉ có thể chứa tối đa một lệnh gọi hàm package.

 package(default_deprecation, default_package_metadata, default_testonly, default_visibility, features)

Các đối số của hàm package bao gồm:

  • default_visibility: Xác định khả năng hiển thị mặc định của các mục tiêu và macro tượng trưng trong gói.
  • default_deprecation: Đặt thông báo không dùng nữa mặc định cho các quy tắc trong gói.
  • default_package_metadata: Chỉ định danh sách 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.
  • default_testonly: Đặt thuộc tính testonly mặc định cho các quy tắc trong gói.
  • features: Danh sách các cờ ảnh hưởng đến ngữ nghĩa của tệp BUILD.

Ví dụ, để khai báo rằng các quy tắc trong gói chỉ hiển thị cho các thành viên của nhóm gói //foo:target, bạn có thể sử dụng:

 package(default_visibility = ["//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 đó. Nhãn này có thể được tham chiếu trong thuộc tính visibility.

package_group(name, packages, includes)

Các đối số của hàm package_group bao gồm:

  • name: Tên duy nhất cho mục tiêu.
  • packages: Danh sách các thông số kỹ thuật của gói.
  • includes: Danh sách các nhóm gói khác có trong nhóm này.

Ví dụ, để tạo một nhóm gói có tên “tropical” chứa các loại trái cây nhiệt đới, bạn có thể sử dụng:

 package_group( name = "tropical", packages = [ "//fruits/mango", "//fruits/orange", "//fruits/papaya/...", ], )

exports_files

Hàm exports_files 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. Điều này cho phép các gói khác tham chiếu trực tiếp đến các tệp nguồn.

exports_files([label, ...], visibility, licenses)

Đối số của hàm exports_files là danh sách tên của các tệp trong gói hiện tại. Bạn cũng có thể chỉ định chế độ hiển thị và giấy phép.

Ví dụ, để xuất tệp golden.txt từ gói test_data, bạn có thể sử dụng:

 exports_files(["golden.txt"])

glob

Hàm glob tìm tất cả các tệp khớp với một số mẫu đường dẫn nhất định và trả về một danh sách đườ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 của riêng nó và chỉ tìm các tệp nguồn (không phải tệp được tạo hay các mục tiêu khác).

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

Các đối số của hàm glob bao gồm:

  • 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ừ.
  • exclude_directories: Chỉ định có loại trừ các thư mục hay không.
  • allow_empty: Chỉ định có cho phép kết quả trống hay không.

Ví dụ, để tạo một thư viện Java được tạo từ tất cả các tệp java trong thư mục này và tất cả các tệp do quy tắc :gen_java_srcs tạo, bạn có thể sử dụng:

 java_library( name = "mylib", srcs = glob(["*.java"]) + [":gen_java_srcs"], deps = "...", ) genrule( name = "gen_java_srcs", outs = [ "Foo.java", "Bar.java", ], ... )

select

Hàm select cho phép thuộc tính quy tắc có thể định cấu hình, nghĩa là giá trị của thuộc tính có thể phụ thuộc vào cờ Bazel dòng lệnh.

select( {conditionA: valuesA, conditionB: valuesB, ...}, no_match_error = "custom message" )

Ví dụ, để làm cho thuộc tính srcs của sh_binary có thể định cấu hình, bạn có thể sử dụng:

 sh_binary( name = "mytarget", srcs = select({ ":conditionA": ["mytarget_a.sh"], ":conditionB": ["mytarget_b.sh"], "//conditions:default": ["mytarget_default.sh"] }) )

subpackages

Hàm subpackages liệt kê các gói con, tương tự như glob liệt kê các tệp và thư mục.

subpackages(include, exclude=[], allow_empty=True)

Ví dụ, để liệt kê tất cả các gói con trực tiếp cho gói foo/BUILD, bạn có thể sử dụng:

 subs1 = subpackages(include = ["**"])

Tóm lại, các hàm package, package_group, exports_files, glob, selectsubpackages là những thành phần cơ bản của tệp BUILD trong Bazel. Chúng cho phép bạn định nghĩa siêu dữ liệu gói, quản lý khả năng hiển thị, xuất tệp, tìm tệp, cấu hình thuộc tính quy tắc và liệt kê các gói con. Việc nắm vững các hàm này là rất quan trọng để xây dựng và quản lý các dự án phức tạp bằng Bazel.

Exit mobile version