Bu sayfada, Bazel'ı C++ projeleriyle kullanmanıza yardımcı olacak kaynaklar bulunmaktadır. Bağlantı oluşturur ve C++ derlemeye özel diğer bilgiler için bir eğiticiye, derleme başka projeleri de var.
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ı
- Önemli 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 uygulamaların yanı sıra aşağıda en iyi uygulamaları paylaşacağım.
BUILD dosyaları
BUILD dosyalarınızı oluştururken aşağıdaki yönergeleri izleyin:
Her
BUILD
dosyası bircc_library
içermelidir kural hedefi belirtir.C++ kitaplıklarınızı mümkün olduğunca ayrıntılı hale ve yapıyı paralel hale getirmek için bu stratejileri kullanabilirsiniz.
srcs
içinde tek bir kaynak dosya varsa kitaplığı şu şekilde adlandırın: bu C++ dosyasının adını yazın. Bu kitaplık C++ dosyaları, başlık dosyalarını ve kitaplığın doğrudan bağımlılıklarını içerir. Ö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.[library-name]_test
ve[library-name]_test.cc
kaynak dosyasını hedefleyin. Örneğin, yukarıda gösterilenmylib
kitaplık hedefi için bir test hedefi aşağıdaki gibi 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ışı üstbilgiler için değil, tırnak içine alınmış bağlantı (
#include "foo/bar/baz.h"
) değerini kullan açılı ayraçlar (#include <foo/bar/baz.h>
)..
(geçerli dizin) veya..
gibi UNIX dizin kısayollarını kullanmaktan kaçının (üst dizin).third_party
harici veri deposu gibi ön ek gerektirecek şekilde eklenerek,include_prefix
vestrip_include_prefix
cc_library
kural hedefinde bağımsız değişkenler olarak kullanılır.
Araç zinciri özellikleri
Aşağıdaki isteğe bağlı özellikler
C++ projelerinin hijyenini iyileştirebileceğini düşünüyorum. Bunlar,
--features
komut satırı işareti veya features
repo
,
package
veya cc_*
kuralları:
parse_headers
özelliği, bunu ayrıştırmak için C++ derleyicisinin kullanılmasını sağlar derlenmiş hedeflerdeki tüm başlık dosyaları ve bağımlılıkları (ancak derlemez) kullanırken--process_headers_in_dependencies
tıklayın. Bu, yalnızca başlık içeren kitaplıklardaki sorunları bulmanıza yardımcı olabilir ve Başlıklar bağımsızdır ve hangi sırayla yazıldıklarından bağımsızdır. dahil.layering_check
özelliği, hedeflerin yalnızca başlıkları içermesini zorunlu kılar doğrudan bağımlılıkları tarafından sağlanır. Varsayılan araç zinciri bunu destekler özelliğini kullanarakclang
derleyiciyi kullanabilirsiniz.