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

Báo cáo vấn đề Xem nguồn Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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 vào chuỗi công cụ C++

Bạn nên sử dụng các hàm trợ giúp có tại @rules_cc//cc:find_cc_toolchain.bzl để phụ thuộc vào chuỗi công cụ CC từ quy tắc Starlark.

Để phụ thuộc vào một chuỗi công cụ C++ trong quy tắc của bạn, hãy đặt tham số toolchains thành use_cc_toolchain(). Sau đó, trong quá trình triển khai quy tắc, hãy sử dụng find_cpp_toolchain(ctx) để lấy CcToolchainInfo. Bạn có thể xem ví dụ đầy đủ về cách hoạt động 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ác cờ dòng lệnh giống như quy tắc C++, nhưng không sử dụng trực tiếp các thao tác C++. Điều này là do khi viết các hành động của riêng mình, chúng 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++ ở chế độ nền.

Các 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 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. Ư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ẽ bị xoá.

Bạn có thể xem ví dụ đầy đủ về cách hoạt động trong các ví dụ về rules_cc.

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 trình cung cấp chứa CompilationContextLinkingContext. Bạn có thể truy cập vào thông tin như tất cả các tiêu đề hoặc thư viện bắc cầu để liên kết. Từ CcInfo và từ quy tắc Starlark tuỳ chỉnh CcToolchainInfo, bạn có thể lấy được 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++ biết rằng chúng cũng có thể phụ thuộc vào quy tắc đó. 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 để sử dụng quy tắc đó, hãy gói CcInfo trong một trì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 đến java_binary, thì quy tắc này không được cung cấp trực tiếp CcInfo (cc_binary phụ thuộc vào java_library là không hợp lý), mà phải gói quy tắc này trong một quy tắc khác, chẳng hạn như JavaCcInfo.

Bạn có thể xem ví dụ đầy đủ về cách hoạt động trong các 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 sau khi API ổn định. Hãy theo dõi #4570 để biết thông tin mới nhất.