Kho lưu trữ, không gian làm việc, gói và mục tiêu

Báo cáo vấn đề Xem nguồn Hằng đêm · 7,3 · 7,2 · 7.1 · 7 · 6,5

Bazel tạo phần mềm từ mã nguồn được sắp xếp trong cây thư mục có tên là kho lưu trữ mới. Một nhóm kho lưu trữ đã xác định sẽ bao gồm không gian làm việc. Nguồn các tệp trong kho lưu trữ được sắp xếp theo hệ thống phân cấp gói lồng nhau, trong đó mỗi gói là một thư mục chứa tập hợp các tệp nguồn có liên quan và một Tệp BUILD. Tệp BUILD chỉ định đầu ra phần mềm có thể được tạo nguồn.

Kho lưu trữ

Các tệp nguồn dùng trong một bản dựng Bazel được sắp xếp trong kho lưu trữ (thường là thành repos). Kho lưu trữ là cây thư mục có tệp đánh dấu ranh giới tại gốc; tệp đánh dấu ranh giới như vậy có thể là MODULE.bazel, REPO.bazel hoặc trong ngữ cảnh cũ, WORKSPACE hoặc WORKSPACE.bazel.

Kho lưu trữ mà lệnh Bazel hiện tại đang chạy được gọi là main kho lưu trữ. Các kho lưu trữ (repo) khác (bên ngoài) được xác định theo quy tắc kho lưu trữ; xem nội dung bên ngoài tổng quan về phần phụ thuộc để biết thêm thông tin.

Workspace

Không gian làm việc là môi trường dùng chung cho tất cả các lệnh Bazel chạy từ cùng một môi trường kho lưu trữ chính. Lớp này bao gồm kho lưu trữ chính và tập hợp mọi kho lưu trữ bên ngoài được xác định kho lưu trữ.

Xin lưu ý rằng trước đây các khái niệm về "kho lưu trữ" và "workspace" là trộn lẫn; từ khoá "không gian làm việc" thường được dùng để chỉ kho lưu trữ và đôi khi thậm chí còn được dùng làm từ đồng nghĩa của "kho lưu trữ".

Gói

Đơn vị chính để sắp xếp mã trong kho lưu trữ là gói. Đáp gói là một tập hợp các tệp liên quan và chỉ rõ cách các tệp đó có thể được dùng để tạo các cấu phần phần mềm đầu ra.

Gói được định nghĩa là một thư mục chứa Tệp BUILD có tên là BUILD hoặc BUILD.bazel. Đáp gói này bao gồm tất cả các tệp trong thư mục của nó, cùng với tất cả các thư mục con trong gói đó, ngoại trừ những tệp chứa tệp BUILD. Từ định nghĩa này, không có tệp hoặc thư mục có thể là một phần của hai gói khác nhau.

Ví dụ: trong cây thư mục sau đây, có hai gói, my/app, và gói con my/app/tests. Lưu ý my/app/data không phải là một gói, nhưng một thư mục thuộc gói my/app.

src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc

Mục tiêu

Gói là một vùng chứa mục tiêu, được xác định trong phần tử của gói BUILD. Hầu hết mục tiêu là một trong hai loại chính, tệpquy tắc.

Tệp được chia thành hai loại. Tệp nguồn thường được viết bởi nỗ lực của mọi người và đăng ký vào kho lưu trữ. Tệp đã tạo, thường được gọi là tệp phái sinh hoặc tệp đầu ra, không được đăng ký, nhưng được tạo từ các tệp nguồn.

Loại mục tiêu thứ hai được khai báo bằng một quy tắc. Từng phiên bản của quy tắc chỉ định mối quan hệ giữa một tập hợp các tệp đầu vào và một tập hợp các tệp đầu ra. Chiến lược phát hành đĩa đơn đầu vào cho một quy tắc có thể là tệp nguồn, nhưng cũng có thể là đầu ra của quy tắc.

Dữ liệu đầu vào cho quy tắc là tệp nguồn hay tệp được tạo đều ở hầu hết trường hợp không quan trọng; điều quan trọng chỉ là nội dung của tệp đó. Dữ kiện này giúp dễ dàng thay thế một tệp nguồn phức tạp bằng một tệp được tạo bằng một quy tắc cụ thể, chẳng hạn như xảy ra khi gánh nặng phải tự mình duy trì tệp có cấu trúc trở nên quá mệt mỏi và ai đó đã viết chương trình để lấy được tệp đó. Người dùng của tệp đó không bắt buộc phải thay đổi. Ngược lại, một lượt hiển thị có thể dễ dàng được thay thế bằng tệp nguồn chỉ có các thay đổi cục bộ.

Dữ liệu đầu vào cho một quy tắc cũng có thể bao gồm các quy tắc khác. Ý nghĩa chính xác của những thuật ngữ đó các mối quan hệ thường khá phức tạp và phụ thuộc vào ngôn ngữ hoặc quy tắc, nhưng một cách trực quan thì rất đơn giản: quy tắc thư viện C++ A có thể có một thư viện C++ khác quy tắc B cho dữ liệu đầu vào. Tác động của phần phụ thuộc này là các tệp tiêu đề của B A trong quá trình biên dịch, các ký hiệu của B khả dụng với A trong quá trình liên kết và dữ liệu thời gian chạy của B có sẵn cho A trong quá trình thực thi.

Bất biến của tất cả các quy tắc là các tệp do quy tắc tạo ra luôn thuộc về gói giống như chính quy tắc; không thể tạo tệp thành một gói khác. Thông thường, thông tin đầu vào của một quy tắc lại đến từ một thông tin khác .

Nhóm gói là tập hợp các gói có mục đích giới hạn khả năng truy cập quy tắc nhất định. Nhóm gói được xác định bằng hàm package_group. Chúng có ba thuộc tính: danh sách các gói mà chúng chứa, tên của chúng và các thuộc tính khác các nhóm gói mà chúng bao gồm. Cách duy nhất được phép để tham chiếu đến các mô-đun này là từ Thuộc tính visibility của các quy tắc hoặc từ thuộc tính default_visibility của hàm package; chúng không tạo hoặc sử dụng tệp. Để biết thêm , hãy tham khảo package_group tài liệu.

Nhãn