Bu sayfa, Bazel'ı C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar içerir. Bu bağlantıda bir eğiticiye, derleme kurallarına ve Bazel ile C++ projeleri oluşturmaya yönelik diğer bilgilere ulaşabilirsiniz.
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++ ile ilgili yaygın kullanım alanları
- C/C++ kuralları
- Önemli 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, aşağıda C++ projelerine özel en iyi uygulamaları bulabilirsiniz.
BUILD dosyaları
BUILD dosyalarınızı oluştururken aşağıdaki yönergeleri uygulayın:
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 hale getirmek için C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale getirmeniz gerekir.
srcs
bölgesinde tek bir kaynak dosya varsa kitaplığa, C++ dosyasının adıyla aynı adı verin. Bu kitaplık C++ dosyaları, eşleşen başlık dosyaları 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. Hedefi[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
Dahil etme yolları için şu yönergeleri izleyin:
Çalışma alanı dizinine göre tüm yolların dahil edilmesini sağlayın.
Sistem dışı başlıklar için tırnak işaretleri (
#include "foo/bar/baz.h"
) kullanın, açılı ayraçlar (#include <foo/bar/baz.h>
) için değil..
(geçerli 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
kodu için (ör. harici depo, ön ek kullanılmasını içerir)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, bir C++ projesinin hijyenini 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şaretini kullanırken C++ derleyicisinin dahili hedeflerdeki tüm başlık dosyalarını ve bağımlılıklarını ayrıştırmak (ancak derlemek) 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 olmasını sağlamaya 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 sağlar. Varsayılan araç zinciri, bu özelliği Linux'ta derleyici olarakclang
ile destekler.