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
Genel Bazel en iyi uygulamalarına ek olarak, C++ projelerine özgü en iyi uygulamalar aşağıda verilmiştir.
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 paralelleştirmek için C++ kitaplıklarınızı olabildiğince ayrıntılı hale getirmeniz gerekir.
srcs
içinde 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. Hedefe[library-name]_test
ve kaynak dosyaya[library-name]_test.cc
ad verin. Ö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 köşeli parantez (
#include <foo/bar/baz.h>
) yerine tırnak içine alınmış dahil etmeler (#include "foo/bar/baz.h"
) kullanı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 artırabilir. 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şaretçisi kullanıldığında derlenmiş hedeflerdeki tüm başlık dosyalarını ve bunların bağımlılıkları 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ı yakalamanıza yardımcı olabilir ve başlıkların kendi kendine yeterli 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ı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.