C++ dan Bazel

Laporkan masalah Lihat sumber Per malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Halaman ini berisi referensi yang akan membantu Anda menggunakan Bazel dengan project C++. {i>Link<i} ini menautkan tutorial, aturan build, dan informasi lain yang spesifik untuk membangun C++ proyek bersama Bazel.

Bekerja dengan Bazel

Referensi berikut akan membantu Anda bekerja dengan Bazel pada project C++:

Praktik terbaik

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

BUILD file

Ikuti panduan di bawah ini saat membuat file BUILD:

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

  • Anda harus membuat perincian library C++ sebanyak untuk memaksimalkan inkrementalitas dan memparalelkan build.

  • Jika ada satu file sumber di srcs, beri nama library yang sama dengan nama file C++ itu. Library ini harus berisi file C++, yang cocok file header, 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 ditunjukkan di atas akan akan terlihat seperti ini:

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

Sertakan jalur

Ikuti panduan berikut untuk jalur penyertaan:

  • Buat semua jalur penyertaan relatif terhadap direktori ruang kerja.

  • Penggunaan tanda kutip mencakup (#include "foo/bar/baz.h") untuk header non-sistem, bukan tanda kurung siku (#include <foo/bar/baz.h>).

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

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

Fitur toolchain

Fitur opsional berikut dapat meningkatkan kebersihan proyek C++. Iklan tersebut dapat diaktifkan menggunakan Flag command line --features atau atribut features repo, Aturan package atau cc_*:

  • Fitur parse_headers membuat compiler C++ digunakan untuk mengurai (tetapi tidak mengompilasi) semua file header dalam target yang dibangun dan dependensinya saat menggunakan --process_headers_in_dependencies penanda. Ini dapat membantu menemukan masalah di library khusus header dan memastikan bahwa {i>header<i} bersifat mandiri dan tidak bergantung pada urutannya disertakan.
  • Fitur layering_check menetapkan bahwa target hanya menyertakan header yang disediakan oleh dependensi langsung mereka. Toolchain default mendukung di Linux dengan clang sebagai compiler.