Tích hợp với quy tắc C++

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Báo cáo sự cố Xem nguồn

Trang này mô tả cách tích hợp với các quy tắc C++ ở nhiều cấp độ.

Truy cập chuỗi công cụ C++

Do việc di chuyển các quy tắc C++ sang nền tảngchuỗi công cụ đang diễn ra, bạn nên sử dụng hàm trợ giúp có tại @bazel_tools//tools/cpp:toolchain_utils.bzl, hoạt động khi cả chuỗi công cụ bị tắt và được bật. Để phụ thuộc vào một chuỗi công cụ C++ trong quy tắc của bạn, hãy thêm thuộc tính Label có tên là _cc_toolchain và trỏ đến thuộc tính @bazel_tools//tools/cpp:current_cc_toolchain (một bản sao của cc_toolchain_alias, trỏ đến chuỗi công cụ C++ hiện được chọn). Sau đó, trong quá trình triển khai quy tắc, hãy sử dụng find_cpp_toolchain(ctx) để tải CcToolchainInfo. Bạn có thể xem một ví dụ đầy đủ hiệu quả trong các ví dụ về rules_cc.

Tạo dòng lệnh và biến môi trường bằng chuỗi công cụ C++

Thông thường, bạn sẽ tích hợp với chuỗi công cụ C++ để có cùng các cờ dòng lệnh như quy tắc C++, nhưng không trực tiếp sử dụng các hành động C++. Điều này là do khi viết các hành động của riêng mình, các hành động này phải hoạt động nhất quán với chuỗi công cụ C++ – ví dụ: truyền cờ dòng lệnh C++ đến một công cụ gọi trình biên dịch C++ trong hậu trường.

Quy tắc C++ sử dụng một cách đặc biệt để tạo dòng lệnh dựa trên cấu hình tính năng. Để tạo dòng lệnh, bạn cần có:

Vẫn có các phương thức getter dành riêng cho công cụ, chẳng hạn như compiler_executable. Ưu tiên get_tool_for_action hơn các lệnh gọi này vì cuối cùng, phương thức getter cụ thể sẽ bị xoá.

Bạn có thể xem một ví dụ đầy đủ hiệu quả trong các ví dụ về rules_cc.

Việc triển khai các quy tắc Starlark phụ thuộc vào quy tắc C++ và/hoặc quy tắc C++ có thể phụ thuộc vào

Hầu hết các quy tắc C++ đều cung cấp CcInfo, một nhà cung cấp có chứa CompilationContextLinkingContext. Thông qua những phương thức này, bạn có thể truy cập vào các thông tin như tất cả tiêu đề hoặc thư viện gián tiếp để liên kết. Từ CcInfo và từ CcToolchainInfo quy tắc Starlark tùy chỉnh sẽ có thể nhận tất cả thông tin cần thiết.

Nếu quy tắc Starlark tuỳ chỉnh cung cấp CcInfo thì đó là tín hiệu cho các quy tắc C++ mà quy tắc đó cũng có thể phụ thuộc vào. Tuy nhiên, hãy cẩn thận – nếu bạn chỉ cần truyền CcInfo thông qua biểu đồ đến quy tắc nhị phân mà sau đó sử dụng, hãy gói CcInfo trong một nhà cung cấp khác. Ví dụ: nếu muốn áp dụng các phần phụ thuộc gốc lên đến java_binary, thì quy tắc đó không được cung cấp trực tiếp CcInfo (cc_binary tuỳ thuộc vào java_library là không hợp lý), mà phải gói gọn phần đó, ví dụ: JavaCcInfo.

Bạn có thể xem một ví dụ đầy đủ hiệu quả trong các ví dụ về rules_cc.

Sử dụng lại logic và hành động của các quy tắc C++

Chưa ổn định; phần này sẽ được cập nhật sau khi API ổn định. Hãy theo dõi #4570 để biết thông tin mới nhất.