Trang này chứa các tài nguyên giúp bạn sử dụng Bazel với các dự án C++. Quảng cáo này liên kết hướng dẫn, quy tắc xây dựng và các thông tin khác cụ thể về việc xây dựng C++ dự án của Bazel.
Làm việc với Bazel
Các tài nguyên sau sẽ giúp bạn xử lý Bazel trong 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 trong 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 phương pháp hay nhất chung cho Bazel, dưới đây là dành riêng cho dự án C++.
XÂY DỰNG tệp
Hãy làm theo các nguyên tắc bên dưới khi tạo tệp BUILD:
Mỗi tệp
BUILD
phải chứa mộtcc_library
mục tiêu quy tắc cho mỗi đơn vị biên dịch trong thư mục.Bạn nên chi tiết hoá thư viện C++ của mình ở mức tối đa nhằm tăng tối đa mức độ gia tăng và tải song song bản dựng.
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++, bất kỳ tệp nào phù hợp (các) tệp tiêu đề và 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_test
cho mỗi mục tiêucc_library
trong tệp. Đặt tên cho nhắm mục tiêu[library-name]_test
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ệnmylib
như trình bày ở trên sẽ sẽ có dạng như sau:cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
Bao gồm đường dẫn
Hãy làm theo các nguyên tắc sau để thêm đường dẫn:
Đặt tất cả các đường dẫn bao gồm tương ứng với thư mục không gian làm việc.
Sử dụng dấu ngoặc kép (
#include "foo/bar/baz.h"
) cho các tiêu đề không thuộc hệ thống, chứ không phải dấu ngoặc nhọn (#include <foo/bar/baz.h>
).Tránh sử dụng các lối tắt 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ã cũ hoặc mã
third_party
yêu cầu phải trỏ ra ngoài kho lưu trữ dự án (chẳng hạn như kho lưu trữ bên ngoài) bao gồm yêu cầu phải có tiền tố, sử dụnginclude_prefix
vàstrip_include_prefix
đối số trê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 không bắt buộc sau đây
có thể cải thiện chất lượng của dự án C++. Bạn có thể bật chúng bằng
Cờ dòng lệnh --features
hoặc thuộc tính features
của
repo
!
Quy tắc package
hoặc cc_*
:
- Tính năng
parse_headers
giú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 mục tiêu đã tạo và phần phụ thuộc của chúng khi sử dụng--process_headers_in_dependencies
cờ. Điều này có thể giúp phát hiện vấn đề trong các thư viện chỉ có tiêu đề và đảm bảo rằng tiêu đề độc lập và độc lập với thứ tự chúng bao gồm. - Tính năng
layering_check
thực thi việc chỉ nhắm mục tiêu bao gồm tiêu đề do các phần phụ thuộc trực tiếp cung cấp. Chuỗi công cụ mặc định hỗ trợ điều này tính năng trên Linux vớiclang
là trình biên dịch.