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ảng và chuỗ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, hàm này hoạt động cả khi tắt và bật chuỗi công cụ. Để 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ỏ thuộc tính đó đến @bazel_tools//tools/cpp:current_cc_toolchain
(một thực thể 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ể xem một ví dụ đầy đủ về cách hoạt động của 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á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++. Lý do là khi viết các thao tác của riêng chúng ta, các thao tác đó 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++ ở hậu trường.
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ó:
features
vàaction_configs
– những đối tượng này xuất phát từCcToolchainConfigInfo
và được đóng gói trongCcToolchainInfo
FeatureConfiguration
– do cc_common.configure_features trả về- biến cấu hình chuỗi công cụ cc – do cc_common.create_compile_variables hoặc cc_common.create_link_variables trả về.
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ụ cuối cùng sẽ bị xoá.
Bạn có thể xem một ví dụ đầy đủ về cách hoạt động của 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
, trình cung cấp chứa CompilationContext
và LinkingContext
.
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ừ các quy tắc Starlark tuỳ chỉnh CcToolchainInfo
có thể nhận đượ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++ 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 đồ tới quy tắc nhị phân để sau đó sử dụng, 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 đó 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ý),
thì quy tắc nên bao bọc nội dung đó, chẳng hạn như JavaCcInfo
.
Bạn có thể xem một ví dụ đầy đủ về cách hoạt động của 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; Mục này sẽ được cập nhật khi API ổn định. Hãy làm theo bước #4570 để biết thông tin mới nhất.