Bu sayfada, Bazel'i C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar yer almaktadır. Bu kılavuzda, Bazel ile C++ projeleri oluşturmaya özel bir eğitime, derleme kurallarına ve diğer bilgilere bağlantılar yer alır.
Bazel ile çalışma
Aşağıdaki kaynaklar, C++ projelerinde Bazel ile çalışmanıza yardımcı olur:
- Eğitim: C++ projesi oluşturma
- C++'ın yaygın kullanım alanları
- C/C++ kuralları
- Temel Kitaplıklar
- C++ toolchain yapılandırması
- Eğitim: C++ araç zincirlerini yapılandırma
- C++ kurallarıyla entegrasyon
En iyi uygulamalar
Genel Bazel en iyi uygulamalarına ek olarak, aşağıda C++ projelerine özel en iyi uygulamalar verilmiştir.
BUILD dosyaları
BUILD dosyalarınızı oluştururken aşağıdaki yönergelere uyun:
- Her - BUILDdosyası, dizindeki derleme birimi başına bir- cc_librarykural hedefi içermelidir.
- Artımlı derlemeyi en üst düzeye çıkarmak ve derlemeyi paralelleştirmek için C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale getirmeniz gerekir. 
- srcsiçinde tek bir kaynak dosya varsa kitaplığa bu C++ dosyasının adını verin. Bu kitaplık, C++ dosyalarını, eşleşen tüm üstbilgi dosyalarını ve kitaplığın doğrudan bağımlılıklarını içermelidir. Örneğin:- cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )
- Dosyadaki her - cc_libraryhedefi için bir- cc_testkural hedefi kullanın. Hedef- [library-name]_testve kaynak dosyayı- [library-name]_test.ccadlandırın. Örneğin, yukarıda gösterilen- mylibkitaplık hedefi için bir test hedefi şu şekilde görünür:- cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
Yolları dahil edin
Dahil etme yolları için aşağıdaki yönergeleri uygulayın:
- Tüm include yollarını çalışma alanı dizinine göreli hale getirin. 
- Sistem başlıkları dışındaki başlıklar için köşeli parantez ( - #include <foo/bar/baz.h>) değil, tırnak işaretiyle belirtilmiş eklemeler (- #include "foo/bar/baz.h") kullanın.
- .(geçerli dizin) veya- ..(üst dizin) gibi UNIX dizin kısayolları kullanmaktan kaçının.
- Proje deposunun dışına işaret eden include'lar gerektiren eski veya - third_partykod için (ör. önek gerektiren harici depo include'ları)- cc_librarykural hedefinde- include_prefixve- strip_include_prefixbağımsız değişkenlerini kullanın.
Araç zinciri özellikleri
Aşağıdaki isteğe bağlı özellikler, C++ projesinin hijyenini iyileştirebilir. Bu kurallar, --features komut satırı işareti veya repo, package ya da cc_* kurallarının features özelliği kullanılarak etkinleştirilebilir:
- parse_headersözelliği,- --process_headers_in_dependenciesişaretini kullanırken oluşturulan hedeflerdeki ve bağımlılıklarındaki tüm başlık dosyalarının ayrıştırılması (ancak derlenmemesi) için C++ derleyicisinin kullanılmasını sağlar. Bu, yalnızca başlık içeren kitaplıklardaki sorunları yakalamaya yardımcı olabilir ve başlıkların bağımsız olmasını ve dahil edildikleri sıradan bağımsız olmasını sağlayabilir.
- layering_checközelliği, hedeflerin yalnızca doğrudan bağımlılıkları tarafından sağlanan üstbilgileri içermesini zorunlu kılar. Varsayılan araç zinciri, derleyici olarak- clangile Linux'ta bu özelliği destekler.