C++ và Bazel

Báo cáo sự cố Xem nguồn

Trang này chứa tài nguyên giúp bạn sử dụng Bazel với các dự án C++. Tài liệu này liên kết đến hướng dẫn, các quy tắc xây dựng và thông tin khác dành riêng cho việc xây dựng dự án C++ bằng Bazel.

Làm việc với Bazel

Các tài nguyên sau đây sẽ giúp bạn hợp tác với Bazel trong các dự án C++:

Các phương pháp hay nhất

Ngoài các phương pháp hay nhất về Bazel, dưới đây là các phương pháp hay nhất 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ột mục tiêu quy tắc cc_library 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 nhiều nhất có thể để tối đa hoá 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 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++, mọi 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_test cho mỗi mục tiêu cc_library trong tệp. Đặt tên cho [library-name]_test mục tiêu và tệp nguồn là [library-name]_test.cc. Ví dụ: mục tiêu kiểm thử cho mục tiêu thư viện mylib hiển thị ở trên 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 đối với đường dẫn bao gồm:

  • Đặt tất cả đường dẫn bao gồm cả đường dẫn tương ứng đến thư mục không gian làm việc.

  • Sử dụng dấu ngoặc kép bao gồm (#include "foo/bar/baz.h") cho các tiêu đề không phải hệ thống, chứ không phải dấu ngoặc góc (#include <foo/bar/baz.h>).

  • Tránh sử dụng lối 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ã cũ hoặc mã third_party đòi hỏi trỏ bên ngoài kho lưu trữ dự án, chẳng hạn như kho lưu trữ bên ngoài cần có tiền tố, hãy sử dụng các đối số include_prefixstrip_include_prefix trên mục tiêu quy tắc cc_library.