Önceki bölümlerde paketler, hedefler ve etiketler tanımlanıp bağımlılık grafiği soyut olarak oluşturuluyordu. Bu bölümde, bir paketi tanımlamak için kullanılan somut söz dizimi açıklanmaktadır.
Her pakette bir BUILD
dosyası bulunur. Bu dosya kısa bir programdır.
BUILD
dosya, zorunlu bir dil olan Starlark kullanılarak değerlendirilir.
Bu ifadeler, sıralı bir sıralı liste olarak yorumlanır.
Genel olarak, sıralama önemlidir: Değişkenler, örneğin kullanılmadan önce tanımlanmalıdır. Bununla birlikte, BUILD
dosyalarının çoğu yalnızca derleme kuralları beyanlarından oluşur ve bu ifadelerin göreli sırası önemsizdir. Önemli olan, paket değerlendirmesinin tamamlandığı zamana kadar hangi kuralların hangi değerlerle beyan edildiğidir.
cc_library
gibi bir derleme kuralı işlevi yürütüldüğünde grafikte yeni bir hedef oluşturulur. Bu hedefe daha sonra bir etiket kullanılarak referans verilebilir.
Basit BUILD
dosyalarında, kural bildirimleri davranışı değiştirilmeden serbest şekilde yeniden sıralanabilir.
Kod ile veriler arasında net bir ayrım yapılmasını teşvik etmek için BUILD
dosyaları işlev tanımlarını, for
ifadelerini veya if
ifadelerini içeremez (ancak listeyi anlamaya ve if
ifadelerine izin verilir). İşlevler, bunun yerine .bzl
dosyalarında tanımlanabilir. Buna ek olarak BUILD
dosyalarında *args
ve **kwargs
bağımsız değişkenlerine izin verilmez. Bunun yerine, tüm bağımsız değişkenleri açıkça listeleyin.
Aslına bakılırsa, Starlark'taki programlar rastgele G/Ç gerçekleştiremez. Bu değişmez değer, BUILD
dosyalarının hermetik yorumlanmasını sağlar. Bu yaklaşım, bilinen bir girdi grubuna bağlıdır. Bu, yapıların yeniden oluşturulabilir olmasını sağlamak için çok önemlidir.
Daha ayrıntılı bilgi için Hermetiklik bölümünü inceleyin.
BUILD
dosyaları yalnızca ASCII karakterlerle yazılmalıdır ancak teknik olarak Latin-1 karakter kümesi kullanılarak yorumlanmaları gerekir.
Temel dosyaların bağımlılığı her değiştiğinde BUILD
dosyalarının da güncellenmesi gerektiğinden, genellikle bir ekipte birden fazla kişi tarafından tutulur. BUILD
dosya yazarları, herkese açık kullanım olsun veya olmasın her bir derleme hedefinin rolünü belgelemek ve paketin rolünü belgelemek için resmi olarak yorum yapmalıdır.
Uzantı yükleniyor
Bazel uzantıları .bzl
ile biten dosyalardır. Bir uzantıdan simge içe aktarmak için load
ifadesini kullanın.
load("//foo/bar:file.bzl", "some_library")
Bu kod, foo/bar/file.bzl
dosyasını yükler ve ortama some_library
simgesini ekler. Bu; yeni kuralları, işlevleri veya sabit değerleri (ör. bir dize veya liste) yüklemek için kullanılabilir. load
çağrısına ek bağımsız değişkenler kullanılarak birden fazla simge içe aktarılabilir. Bağımsız değişkenler dize değişmez değerleri olmalıdır (değişken yok) ve load
ifadeleri üst düzeyde görünmelidir. İşlev gövdesinde yer almamalıdır.
load
bağımsız değişkeninin ilk bağımsız değişkeni, bir .bzl
dosyasını tanımlayan etikettir. Göreli bir etiketse mevcut bzl
dosyasını içeren pakete (dizine değil) göre çözümlenir. load
ifadelerindeki göreli etiketler başında bir :
kullanmalıdır.
load
, takma adları da destekler. Bu nedenle, içe aktarılan simgelere farklı adlar atayabilirsiniz.
load("//foo/bar:file.bzl", library_alias = "some_library")
Bir load
ifadesi içinde birden çok takma ad tanımlayabilirsiniz. Ayrıca, bağımsız değişken listesi hem takma adlar hem de normal simge adları içerebilir. Aşağıdaki örnek tamamen yasaldır (lütfen tırnak işaretlerinin ne zaman kullanılacağını unutmayın).
load(":my_rules.bzl", "some_rule", nice_alias = "some_other_rule")
.bzl
dosyasında, _
ile başlayan simgeler dışa aktarılmaz ve başka bir dosyadan yüklenemez.
Kimlerin .bzl
dosyası yükleyebileceğini kısıtlamak için yükleme görünürlüğünü kullanabilirsiniz.
Derleme kuralı türleri
Derleme kurallarının büyük bir kısmı dillere göre gruplanmış olarak ailelerde gelir. Örneğin cc_binary
, cc_library
ve cc_test
, sırasıyla C++ ikili programları, kitaplıkları ve testleri için oluşturma kurallarıdır. Diğer diller, Java için java_*
gibi farklı bir ön eke sahip aynı adlandırma şemasını kullanır. Bu işlevlerden bazıları Ensiklopedi Oluşturma konusunda belgelenmiştir ancak herkes yeni kurallar oluşturabilir.
*_binary
kuralları, belirli bir dilde yürütülebilir programlar oluşturur. Bir derlemeden sonra yürütülebilir dosya, derleme aracının ikili çıkış ağacında kural etiketine karşılık gelen bir ada konur. Böylece//my:program
(örneğin)$(BINDIR)/my/program
adresinde görünür.Bazı dillerde bu tür kurallar, kurala ait bir
data
özelliğinde bahsedilen tüm dosyaları veya bağımlılıkların geçici olarak kapatılmasındaki herhangi bir kuralı içeren bir Runfiles dizini de oluşturur. Bu dosya grubu, üretimde dağıtım kolaylığı için tek bir yerde toplanır.*_test
kuralları, otomatik test için kullanılan bir*_binary
kuralının uzmanlığıdır. Testler, başarıdan sıfır sonuç veren programlardır.İkililer gibi, testlerde de Runfiles ağacı da vardır. Bunlar altındaki test dosyaları, çalışma zamanında meşru biçimde açılabilen tek dosyadır. Örneğin,
cc_test(name='x', data=['//foo:bar'])
programı yürütme sırasında$TEST_SRCDIR/workspace/foo/bar
dosyasını açabilir ve okuyabilir. (Her programlama dilinin$TEST_SRCDIR
değerine erişim için kendi yardımcı program işlevi vardır ancak bunların tümü doğrudan ortam değişkenini kullanmaya eş değerdir.) Kurala uyulmaması, uzak test ana makinesinde yürütüldüğünde testin başarısız olmasına neden olur.*_library
kuralları, belirtilen programlama dilinde ayrı olarak derlenmiş modülleri belirtir. Kitaplıklar diğer kitaplıklara bağlı olabilir, ikili programlar ve testler de beklenen ayrı derleme davranışıyla kitaplıklara bağlı olabilir.
Etiketler | Bağımlılıklar |