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, C++ projelerine özel en iyi uygulamaları aşağıda bulabilirsiniz.
BUILD dosyaları
BUILD dosyalarınızı oluştururken aşağıdaki yönergelere uyun:
Her
BUILDdosyası, dizindeki derleme birimi başına bircc_librarykural hedefi içermelidir.Artımlılığı en üst düzeye çıkarmak ve derlemeyi paralelleştirmek için C++ kitaplıklarınızı mümkün olduğunca ayrıntılandırmanız gerekir.
srcsiçinde tek bir kaynak dosya varsa kitaplığa bu C++ dosyasının adını verin. Bu kitaplıkta C++ dosyaları, eşleşen tüm üstbilgi dosyaları ve kitaplığın doğrudan bağımlılıkları bulunmalıdır. Örneğin:cc_library( name = "mylib", srcs = ["mylib.cc"], hdrs = ["mylib.h"], deps = [":lower-level-lib"] )Dosyadaki her
cc_libraryhedefi için bircc_testkural hedefi kullanın. Hedef[library-name]_testve kaynak dosyayı[library-name]_test.ccadlandırın. Örneğin, yukarıda gösterilenmylibkitaplı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
Include yolları için aşağıdaki yönergeleri uygulayın:
Tüm dahil etme yollarını çalışma alanı dizinine göre belirleyin.
Sistem dışı 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 hedefindeinclude_prefixvestrip_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ı ayrıştırmak (ancak derlemek değil) 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 olarakclangile Linux'ta bu özelliği destekler.