Bu sayfada, Bazel'ı C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar bulunmaktadır. Bir eğiticiye, 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ı olur:
- Eğitim: C++ projesi oluşturma
- C++ 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 yönergeleri izleyin:
Her
BUILD
dosyası, dizindeki her derleme birimi için 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 başlık 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
olarak adlandırın. Örneğin, yukarıda gösterilenmylib
kitaplık hedefi için bir test hedefi şöyle görünür:cc_test( name = "mylib_test", srcs = ["mylib_test.cc"], deps = [":mylib"] )
Yolları dahil edin
Yolları dahil etmek için şu yönergeleri izleyin:
Tüm öğelerin çalışma alanı dizinine göre yol içermesini sağlayın.
Sistem dışı başlıklar için açılı parantezleri (
#include <foo/bar/baz.h>
) değil, tırnak içine alınmış içermeleri (#include "foo/bar/baz.h"
) kullanın..
(geçerli dizin) veya..
(üst dizin) gibi UNIX dizin kısayollarını kullanmaktan kaçının.Harici kod deposunun ön ek gerektirmesi gibi, proje deposunun dışına işaret etmeyi gerektiren eski veya
third_party
kodları içincc_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++ projelerinin hijyenini artırabilir. Bunlar, --features
komut satırı işareti veya repo
, package
veya 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ı tarafından sağlanan başlıkları içermesini zorunlu kılar. Varsayılan araç zinciri, bu özelliği Linux'ta derleyici olarakclang
ile destekler.