En İyi Uygulamalar

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 .

Bu sayfada, Bazel'i bildiğinizi varsayılarak Bazel'in özelliklerinden tam olarak yararlanmak için projelerinizi yapılandırmayla ilgili yönergeler ve öneriler sunulmaktadır.

Genel hedefler şunlardır:

  • Paralellik ve artımlılığa izin vermek için ayrıntılı bağımlılıklardan yararlanmak.
  • Bağımlılıkları iyi bir şekilde kapsamak için.
  • Kodu iyi yapılandırılmış ve test edilebilir hale getirmek için.
  • Anlaması ve bakımı kolay bir derleme yapılandırması oluşturmak için.

Bu kurallar zorunlu değildir. Çok az proje bu kuralların tümüne uyabilir. lint'in man sayfasında da belirtildiği gibi, "Katı kontrolde hata vermeyen gerçek bir program üreten ilk kişiye özel bir ödül verilecektir." Ancak bu ilkeleri mümkün olduğunca fazla uygulamak, projenin daha okunaklı, hatalara daha az eğilimli ve daha hızlı oluşturulmasını sağlar.

Bu sayfada, bu RFC'de açıklanan şart düzeyleri kullanılmaktadır.

Derleme ve testleri çalıştırma

Bir proje, kararlı dalında her zaman bazel build //... ve bazel test //... işlemlerini başarıyla çalıştırabilmelidir. Gerekli olan ancak belirli koşullar altında oluşturulmayan hedefler (ör. özel derleme işaretleri gerektirme,belirli bir platformda derlememe, lisans sözleşmeleri gerektirme) mümkün olduğunca spesifik bir şekilde etiketlenmelidir (örneğin, "requires-osx"). Bu etiketleme, hedeflerin "manuel" etikete göre daha ayrıntılı bir düzeyde filtrelenmesine olanak tanır ve BUILD dosyasını inceleyen kişinin hedef kısıtlamalarının ne olduğunu anlamasına olanak tanır.

Üçüncü taraf bağımlılıkları

Üçüncü taraf bağımlılıklarını belirtebilirsiniz:

  • Alternatif olarak, bunları WORKSPACE dosyasında uzak depo olarak tanımlayabilirsiniz.
  • İsterseniz bu dosyaları çalışma alanı dizininizin altındaki third_party/ adlı bir dizine de yerleştirebilirsiniz.

İkili programlara bağlı olarak

Mümkün olduğu sürece her şeyin kaynaktan derlenmesi gerekir. Genel olarak bu, bir some-library.so kitaplığına bağlı olmak yerine bir BUILD dosyası oluşturup some-library.so'yi kaynaklarından derleyeceğiniz ve ardından bu hedefe bağlı kalacağınız anlamına gelir.

Her zaman kaynaktan derleme, bir derlemenin uyumsuz işaretlerle veya farklı bir mimariyle oluşturulmuş bir kitaplık kullanmamasını sağlar. Kapsam, statik analiz veya dinamik analiz gibi yalnızca kaynak üzerinde çalışan bazı özellikler de vardır.

Sürüm oluşturma

Mümkün olduğunda tüm kodu baştan derlemeyi tercih edin. Sürümlerin kullanılması gerektiğinde hedef ada sürümü dahil etmekten kaçının (örneğin, //guava-20.0 değil, //guava). Bu adlandırma, kitaplığın güncellenmesini kolaylaştırır (yalnızca bir hedefin güncellenmesi gerekir). Ayrıca elmas bağımlılık sorunlarına karşı daha dirençlidir: Bir kitaplık guava-19.0, diğeri guava-20.0 bağımlıysa iki farklı sürüme bağımlı bir kitaplık ortaya çıkabilir. Her iki hedefi de bir guava kitaplığına yönlendirmek için yanıltıcı bir takma ad oluşturduysanız BUILD dosyaları yanıltıcıdır.

.bazelrc dosyası kullanılıyor

Projeye özel seçenekler için workspace/.bazelrc yapılandırma dosyasını kullanın (bazelrc biçimine bakın).

Projeniz için kaynak denetimine kaydetmek istemediğiniz kullanıcı başına seçenekleri desteklemek istiyorsanız şu satırı ekleyin:

try-import %workspace%/user.bazelrc

(veya başka bir dosya adı) workspace/.bazelrc ve .gitignore içine user.bazelrc ekleyin.

Paketler

Derlenebilir dosyalar içeren her dizin bir paket olmalıdır. BUILD dosyası alt dizinlerdeki dosyalara (ör. srcs = ["a/b/C.java"]) başvuruyorsa bu, söz konusu alt dizine bir BUILD dosyasının eklenmesi gerektiğinin işaretidir. Bu yapı ne kadar uzun süre kalırsa döngüsel bağımlılıkların yanlışlıkla oluşturulması, hedefin kapsamı kayacak ve giderek artan sayıda ters bağımlılığın güncellenmesi gerekecektir.