Trang này chứa các tài nguyên giúp bạn sử dụng Bazel cho các dự án C++. Tài liệu này liên kết đến thông tin hướng dẫn, các quy tắc lập trình và thông tin khác dành riêng cho việc xây dựng các dự án C++ bằng Bazel.
Làm việc trên Bazel
Các tài nguyên sau đây sẽ giúp bạn sử dụng Bazel hiệu quả cho các dự án C++:
- Hướng dẫn: Xây dựng dự án C++
- Các trường hợp sử dụng phổ biến của C++
- Quy tắc C/C++
- Thư viện thiết yếu
- Cấu hình chuỗi công cụ C++
- Hướng dẫn: Định cấu hình chuỗi công cụ C++
- Tích hợp với các quy tắc C++
Các phương pháp hay nhất
Ngoài các nguyên tắc khuyến nghị chung cho Bazel, dưới đây là các phương pháp hay nhất dành riêng cho dự án C++.
Tệp BUILD
Hãy tuân thủ các nguyên tắc dưới đây khi tạo tệp BUILD:
Mỗi tệp
BUILDphải chứa một mục tiêu quy tắccc_librarycho mỗi đơn vị biên dịch trong thư mục.Bạn nên chia nhỏ các thư viện C++ hết mức có thể để việc sửa bản dựng theo từng phần và xử lý bản dựng song song được tiến hành thuận lợi nhất.
Nếu có một tệp nguồn duy nhất trong
srcs, hãy đặt tên cho thư viện giống như tên của tệp C++ đó. Thư viện này phải chứa (các) tệp C++, (các) tệp tiêu đề phù hợp và các phần phụ thuộc trực tiếp của thư viện. Ví dụ:cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )Sử dụng một mục tiêu quy tắc
cc_testcho mỗi mục tiêucc_librarytrong tệp. Đặt tên cho tệp[library-name]_testđích và tệp nguồn[library-name]_test.cc. Ví dụ: mục tiêu kiểm thử cho mục tiêu thư việnmylibxuất hiện ở trên sẽ có dạng như sau:cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
Đường dẫn include
Hãy làm theo các nguyên tắc sau đối với đường dẫn include:
Tạo tất cả các đường dẫn include tương ứng với thư mục không gian làm việc.
Sử dụng dấu ngoặc kép cho lệnh include (
#include "foo/bar/baz.h") đối với các tệp tiêu đề không phải của hệ thống, thay vì dấu ngoặc nhọn (#include <foo/bar/baz.h>).STránh sử dụng các ký hiệu tắt cho thư mục UNIX, chẳng hạn như
.(thư mục hiện tại) hoặc..(thư mục mẹ).Đối với mã
third_partyhoặc mã nguồn cũ cần lệnh include trỏ ra ngoài kho lưu trữ dự án, chẳng hạn như các lệnh include dẫn đến kho lưu trữ bên ngoài và cần tiền tố, hãy dùng các đối sốinclude_prefixvàstrip_include_prefixtrên mục tiêu quy tắccc_library.
Các tính năng của chuỗi công cụ
Các tính năng tuỳ chọn sau đây có thể cải thiện độ sạch sẽ của một dự án C++. Bạn có thể bật các quy tắc này bằng cờ hiệu dòng lệnh --features hoặc thuộc tính features của các quy tắc repo, package hoặc cc_*:
- Tính năng
parse_headersgiúp trình biên dịch C++ được dùng để phân tích cú pháp (nhưng không biên dịch) tất cả các tệp tiêu đề trong các mục tiêu đã tạo và các phần phụ thuộc của chúng bằng cờ lệnh--process_headers_in_dependencies. Điều này có thể giúp phát hiện các lỗi trong những thư viện chỉ có tệp tiêu đề và đảm bảo rằng các tệp tiêu đề là độc lập và không phụ thuộc vào thứ tự mà chúng được nạp vào. - Tính năng
layering_checkđảm bảo rằng các mục tiêu chỉ bao gồm những tệp tiêu đề do các phần phụ thuộc trực tiếp của chúng cung cấp. Chuỗi công cụ mặc định hỗ trợ tính năng này trên Linux bằng trình biên dịchclang.