Bu sayfada, Bazel'i C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar yer almaktadır. Bu sayfa, bir eğitime, derleme kurallarına ve Bazel ile C++ projeleri oluşturmaya özel diğer bilgilere bağlantı verir.
Bazel ile çalışma
Aşağıdaki kaynaklar, C++ projelerinde Bazel ile çalışmanıza yardımcı olacaktır:
- Eğitim: C++ projesi oluşturma
- C++'nun yaygın kullanım alanları
- C/C++ kuralları
- Temel Kitaplıklar
- C++ araç zinciri yapılandırması
- Eğitim: C++ araç zincirlerini yapılandırma
- C++ kurallarıyla entegrasyon
En iyi uygulamalar
Bazel ile ilgili genel en iyi uygulamalara ek olarak, aşağıda C++ projelerine özel en iyi uygulamalar yer almaktadır.
BUILD dosyaları
BUILD dosyalarınızı oluştururken aşağıdaki kurallara uyun:
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 yapmak için C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale getirmelisiniz.
srcs
ürününde tek bir kaynak dosya varsa kitaplığı, söz konusu C++ dosyasının adıyla aynı şekilde adlandırın. Bu kitaplık, C++ dosyalarını, eşleşen tüm üstbilgi dosyalarını ve kitaplığın doğrudan bağımlıları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
olarak 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
Dahil etme yolları için aşağıdaki yönergeleri uygulayın:
Tüm dahil etme yollarını Workspace dizine göre yapın.
Sistem dışı üstbilgiler için tırnak içine alınmış dahil etmeler (
#include "foo/bar/baz.h"
) kullanın, köşeli parantez (#include <foo/bar/baz.h>
) kullanmayın..
(mevcut dizin) veya..
(üst dizin) gibi UNIX dizin kısayollarını kullanmaktan kaçının.Proje deposunun dışına işaret etmeyi gerektiren eski veya
third_party
kodlar için (ör. harici depo, ön ek gerektirir)cc_library
kural hedefindeinclude_prefix
vestrip_include_prefix
bağımsız değişkenlerini kullanın.
Araçlar zinciri özellikleri
Aşağıdaki isteğe bağlı özellikler, C++ projesinin temizliğini iyileştirebilir. Bunlar, --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şareti kullanılırken C++ derleyicinin yerleşik hedeflerdeki tüm başlık dosyalarını ve bağımlılıklarını ayrıştırmak (ancak derlemek değil) için kullanılmasını sağlar. Bu, yalnızca başlık içeren kitaplıklardaki sorunları yakalamanıza ve başlıkların bağımsız ve eklendikleri sıradan bağımsız olduğundan emin olmaya yardımcı olabilir.layering_check
özelliği, hedeflerin yalnızca doğrudan bağımlılıklarının sağladığı üstbilgileri içermesini zorunlu kılar. Varsayılan araç zinciri, Linux'ta derleyici olarakclang
kullanıldığında bu özelliği destekler.