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 chuỗi công cụ C++ trong quy tắc, 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) để nhận
CcToolchainInfo. Bạn có thể xem ví dụ hoàn chỉnh về cách hoạt động
trong các ví dụ về rules_cc
examples.
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 trực tiếp sử dụng các thao tác C++. Điều này là do khi viết các thao tác của riêng mình, các thao tác 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++ ở 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 dòng lệnh, bạn cần có những thông tin sau:
featuresvàaction_configs– các thông tin này đến từCcToolchainConfigInfovà được đóng gói trongCcToolchainInfoFeatureConfiguration– do cc_common.configure_features trả về- các biến cấu hình chuỗi công cụ cc – do cc_common.create_compile_variables hoặc cc_common.create_link_variablestrả về.
Vẫn có các trình truy xuất 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 trình truy xuất này, vì các trình truy xuất dành riêng cho công cụ sẽ bị xoá.
Bạn có thể xem ví dụ hoàn chỉnh 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 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 nhà cung cấp chứa CompilationContext
và
LinkingContext.
Thông qua các quy tắc này, 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ừ CcToolchainInfo, các quy tắc Starlark tuỳ chỉnh sẽ có thể nhận được mọi thông tin cần thiết.
Nếu một quy tắc Starlark tuỳ chỉnh cung cấp CcInfo, thì đó là dấu hiệu cho các quy tắc C++ 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 rồi sử dụng quy tắc đó, hãy 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 java_binary, thì quy tắc này không được cung cấp
CcInfo trực tiếp (cc_binary phụ thuộc vào java_library không có ý nghĩa),
mà phải gói quy tắc này trong, ví dụ: JavaCcInfo.
Bạn có thể xem ví dụ hoàn chỉnh về cách hoạt động trong các ví dụ về rules_cc.
Tái sử dụng logic và các 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.