C++ dan Bazel

Laporkan masalah Lihat sumber Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Halaman ini berisi referensi yang membantu Anda menggunakan Bazel dengan project C++. Halaman ini ditautkan ke tutorial, aturan build, dan informasi lain yang khusus untuk membangun project C++ dengan Bazel.

Bekerja dengan Bazel

Referensi berikut akan membantu Anda menggunakan Bazel di project C++:

Praktik terbaik

Selain praktik terbaik Bazel umum, berikut adalah praktik terbaik khusus untuk project C++.

File BUILD

Ikuti panduan di bawah saat membuat file BUILD Anda:

  • Setiap file BUILD harus berisi satu target aturan cc_library per unit kompilasi dalam direktori.

  • Anda harus membagi library C++ menjadi bagian-bagian kecil sebanyak mungkin untuk memaksimalkan inkrementalitas dan memparalelkan build.

  • Jika ada satu file sumber di srcs, beri nama library yang sama dengan nama file C++ tersebut. Library ini harus berisi file C++, file header yang cocok, dan dependensi langsung library. Contoh:

    cc_library(
        name = "mylib",
        srcs = ["mylib.cc"],
        hdrs = ["mylib.h"],
        deps = [":lower-level-lib"]
    )
    
  • Gunakan satu target aturan cc_test per target cc_library dalam file. Beri nama target [library-name]_test dan file sumber [library-name]_test.cc. Misalnya, target pengujian untuk target library mylib yang ditampilkan di atas akan terlihat seperti ini:

    cc_test(
        name = "mylib_test",
        srcs = ["mylib_test.cc"],
        deps = [":mylib"]
    )
    

Sertakan jalur

Ikuti panduan berikut untuk jalur include:

  • Jadikan semua jalur include relatif terhadap direktori ruang kerja.

  • Gunakan include yang dikutip (#include "foo/bar/baz.h") untuk header non-sistem, bukan tanda kurung sudut (#include <foo/bar/baz.h>).

  • Hindari penggunaan pintasan direktori UNIX, seperti . (direktori saat ini) atau .. (direktori induk).

  • Untuk kode third_party lama yang memerlukan penyertaan yang mengarah ke luar repositori project, seperti penyertaan repositori eksternal yang memerlukan awalan, gunakan argumen include_prefix dan strip_include_prefix pada target aturan cc_library.

Fitur toolchain

Fitur opsional berikut dapat meningkatkan kebersihan project C++. Fitur ini dapat diaktifkan menggunakan flag command line --features atau atribut features dari repo, package atau aturan cc_*:

  • Fitur parse_headers membuat compiler C++ digunakan untuk mengurai (tetapi tidak mengompilasi) semua file header dalam target build dan dependensinya saat menggunakan flag --process_headers_in_dependencies. Hal ini dapat membantu mendeteksi masalah dalam library khusus header dan memastikan bahwa header bersifat mandiri dan tidak bergantung pada urutan penyertaannya.
  • Fitur layering_check memastikan bahwa target hanya menyertakan header yang disediakan oleh dependensi langsungnya. Toolchain default mendukung fitur ini di Linux dengan clang sebagai compiler.