Bu sayfada, Bazel'i C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar yer almaktadır. Bu kılavuzda, Bazel ile C++ projeleri oluşturmaya özgü bir eğiticinin, derleme kurallarının ve diğer bilgilerin 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önergeleri uygulayın:
Her
BUILD
dosyası, dizindeki derleme birimi başına bircc_library
kural hedefi içermelidir.Artımlılığı en üst düzeye çıkarmak ve derlemeyi paralel hale getirmek için C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale getirmeniz gerekir.
srcs
iç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_library
hedefi için bircc_test
kural hedefi kullanın. Hedef[library-name]_test
ve kaynak dosyayı[library-name]_test.cc
adlandırın. Örneğin, yukarıda gösterilenmylib
kitaplı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
İçerme yollarıyla ilgili aşağıdaki yönergeleri uygulayın:
Tüm include yollarını çalışma alanı dizinine göreli hale getirin.
Sistem 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_party
kod için (ör. önek gerektiren harici depo include'ları)cc_library
kural hedefindeinclude_prefix
vestrip_include_prefix
bağı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_dependencies
iş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 sayede, yalnızca başlık içeren kitaplıklardaki sorunları yakalayabilir ve başlıkların bağımsız olduğundan ve dahil edildikleri sıradan bağımsız olduğundan emin olabilirsiniz.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 olarakclang
ile Linux'ta bu özelliği destekler.