Trong các trường hợp sau đây trường hợp nào là tương tác từ

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.coptsjava_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.cmdcc_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.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *