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à Workspace. Các tệp nguồn trong không gian làm việc được sắp xếp theo hệ thống phân cấp lồng nhau các gói, trong đó mỗi gói là một thư mục chứa tập hợp các gói tệp nguồn và một tệp BUILD. Tệp BUILD chỉ định phần mềm nào đầu ra có thể được tạo từ nguồn.

Workspace

Không gian làm việc là một cây thư mục trên hệ thống tệp của bạn có chứa nguồn cho phần mềm bạn muốn xây dựng. Mỗi không gian làm việc có một tệp văn bản có tên WORKSPACE có thể trống hoặc có thể chứa thông tin tham chiếu đến bên ngoài các phần phụ thuộc cần thiết để tạo đầu ra.

Các thư mục chứa tệp có tên là WORKSPACE được xem là gốc của tệp Workspace. Do đó, Bazel bỏ qua mọi cây thư mục trong không gian làm việc bắt nguồn từ một thư mục con chứa tệp WORKSPACE, vì các tệp này tạo thành một không gian làm việc khác.

Bazel cũng hỗ trợ tệp WORKSPACE.bazel dưới dạng email đại diện của tệp WORKSPACE. Nếu cả hai tệp đều tồn tại, WORKSPACE.bazel được dùng.

Kho lưu trữ

Mã được sắp xếp trong kho lưu trữ. Thư mục chứa WORKSPACE là gốc của kho lưu trữ chính, còn được gọi là @. Khác, (bên ngoài) kho lưu trữ được xác định trong tệp WORKSPACE bằng các quy tắc không gian làm việc, hoặc được tạo từ các mô-đun và tiện ích trong hệ thống Bzlmod. Xem bên ngoài tổng quan về phần phụ thuộc để biết thêm thông tin.

Các quy tắc không gian làm việc đi kèm với Bazel được ghi lại trong Không gian làm việc Phần Quy tắc trong phần Tạo Bách khoa toàn thư và tài liệu về nội dung được nhúng Quy tắc về kho lưu trữ Starlark.

Vì kho lưu trữ bên ngoài là chính kho lưu trữ, nên chúng thường chứa WORKSPACE. Tuy nhiên, WORKSPACE tệp bổ sung này bị Bazel bỏ qua. Cụ thể, các kho lưu trữ phụ thuộc vào bắc cầu không được được thêm tự động.

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