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

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++

Do liên tục di chuyển các quy tắc C++ sang nền tảngchuỗi công cụ, 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 cả khi chuỗi công cụ bị tắt và bật. Để phụ thuộc vào 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ỏ thuộc tính đó đến @bazel_tools//tools/cpp:current_cc_toolchain (một bản sao của quy tắc 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) để lấy CcToolchainInfo. Bạn có thể tìm thấy một ví dụ đầy đủ về cách hoạt động trong các ví dụ về quy tắc_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ờ dòng lệnh 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 tự viết các hành động, 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++ ngầm ẩn.

Các quy tắc C++ sử dụng một cách đặc biệt để xây dựng các 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. 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ẽ bị xoá.

Bạn có thể tìm thấy một ví dụ đầy đủ về cách hoạt động trong các ví dụ về quy tắc_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 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. Nhờ vậy, bạn có thể truy cập vào thông tin, chẳng hạn như tất cả tiêu đề hoặc thư viện bắc cầu để liên kết. Từ CcInfo và từ các quy tắc Starlark tuỳ chỉnh CcToolchainInfo sẽ có thể nhận được tất cả thông tin họ cần.

Nếu một 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à chúng 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 để sử dụng quy tắc này, 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 lên đến java_binary, thì bạn không nên trực tiếp cung cấp CcInfo (cc_binary phụ thuộc vào java_library là không hợp lý), chẳng hạn như JavaCcInfo.

Bạn có thể tìm thấy một ví dụ đầy đủ về cách hoạt động trong các ví dụ về quy tắc_cc.

Sử dụng lại logic và thao tác 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.