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

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

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

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

việc di chuyển liên tục các quy tắc C++ lên nền tảngchuỗi công cụ, bạn nên sử dụng chức năng trợ giúp có sẵn tại @bazel_tools//tools/cpp:toolchain_utils.bzl, Phương thức này hoạt động cả khi bạn tắt và bật chuỗi công cụ. Để phụ thuộc vào C++ chuỗi công cụ trong quy tắc của bạn, hãy thêm một Label thuộc tính có tên _cc_toolchain và trỏ thuộc tính đó đến @bazel_tools//tools/cpp:current_cc_toolchain (một thực thể của cc_toolchain_alias mà 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ụ hoàn chỉnh về cách hoạt động trong 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 một gắn cờ dòng lệnh như quy tắc C++, nhưng không trực tiếp sử dụng thao tác C++. Đó là vì khi chúng ta viết hành động, chúng phải hành xử nhất quán với chuỗi công cụ C++ – ví dụ: truyền dòng lệnh C++ gắn cờ đối với một công cụ sẽ gọi trình biên dịch C++ ở hậu trường.

Quy tắc C++ sử dụng một cách đặc biệt để xây dựng dòng lệnh dựa trên tính năng cấu hình. Để tạo một 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 (có thể thực thi). Hãy ưu tiên get_tool_for_action hơn các phương thức này vì các phương thức getter dành riêng cho công cụ sẽ cuối cùng sẽ bị xoá.

Bạn có thể xem một ví dụ hoàn chỉnh về cách hoạt động trong ví dụ về rules_cc.

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

Hầu hết các quy tắc C++ đều cung cấp CcInfo! một nhà cung cấp chứa CompilationContextLinkingContext. Nhờ các công cụ này, bạn có thể truy cập thông tin chẳng hạn như tất cả các tiêu đề bắc cầu hoặc thư viện để liên kết. Từ CcInfo và từ CcToolchainInfo tùy chỉnh Các quy tắc của Starlark có thể lấy được mọi 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++ họ cũng có thể phụ thuộc vào đó. Tuy nhiên, hãy thận trọng - nếu bạn chỉ cần tuyên bố CcInfo thông qua biểu đồ cho quy tắc nhị phân mà sau đó sử dụng chúng, gói CcInfo trong một nhà cung cấp khác. Ví dụ: nếu quy tắc java_library muốn để truyền các phần phụ thuộc gốc lên đến java_binary, thì bạn không nên cung cấp CcInfo trực tiếp (cc_binary phụ thuộc vào java_library là không hợp lý), nội dung đó sẽ được đặt trong mã, ví dụ: JavaCcInfo.

Bạn có thể xem một ví dụ hoàn chỉnh về cách hoạt động trong ví dụ về rules_cc.

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

Chưa ổn định; Phần này sẽ được cập nhật khi API ổn định. Theo dõi #4570 để xem thông tin mới nhất .