Önceki bölümlerde paketler, hedefler ve etiketler açıklanmış ve bağımlılık grafiği oluşturma konusu soyut olarak açıklanmıştır. Bu bölümde, bir paketi tanımlamak için kullanılan somut söz dizimi açıklanmaktadır.
Tanımı gereği her paket, kısa bir program olan BUILD
dosyası içerir. BUILD
dosyaları, zorunlu bir dil olan Starlark kullanılarak değerlendirilir.
Ardışık ifadelerden oluşan bir liste olarak yorumlanırlar.
Genel olarak sıra önemlidir: Örneğin, değişkenler kullanılmadan önce tanımlanmalıdır. Ancak çoğu BUILD
dosyası yalnızca derleme kuralı bildirimlerinden oluşur ve bu ifadelerin göreli sırası önemsizdir. Önemli olan, paket değerlendirmesinin tamamlandığı zamana kadar hangi kuralların tanımlandığı ve hangi değerlerle olduğudur.
cc_library
gibi bir derleme kuralı işlevi yürütüldüğünde, grafikte yeni bir hedef oluşturur. Bu hedefe daha sonra bir etiket kullanılarak başvuruda bulunulabilir.
Basit BUILD
dosyalarında kural bildirimleri, davranışı değiştirmeden serbest bir şekilde yeniden sıralanabilir.
Kod ile verilerin net bir şekilde ayrılmasını teşvik etmek için BUILD
dosyaları; işlev tanımları, for
ifadeleri veya if
ifadeleri içeremez (ancak liste anlamalara ve if
ifadelerine izin verilir). İşlevler bunun yerine .bzl
dosyalarında tanımlanabilir. Ayrıca, 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.
Daha da önemlisi, Starlark'taki programlar rastgele G/Ç gerçekleştiremez. Bu sabit değer, BUILD
dosyalarının yorumlanmasını hermetik hale getirir. Yalnızca bilinen bir giriş grubuna bağlıdır. Bu, derlemelerin yeniden oluşturulabilir olduğundan emin olmak için gereklidir.
Daha ayrıntılı bilgi için Hermeticity bölümünü inceleyin.
BUILD
dosyaları yalnızca ASCII karakterler kullanılarak yazılmalıdır, ancak teknik olarak Latin-1 karakter kümesi kullanılarak yorumlanırlar.
Temel kodun bağımlılıkları her değiştiğinde BUILD
dosyalarının güncellenmesi gerektiğinden, bu dosyalar genellikle bir ekipte birden fazla kişi tarafından yönetilir. BUILD
dosyası yazarları, herkesin kullanımına yönelik olup olmamasına bakılmaksızın her derleme hedefinin rolünü belgelemek ve paketin rolünü belgelemek için serbestçe yorum yapmalıdır.
Uzantı yükleniyor
Bazel uzantıları .bzl
ile biten dosyalardır. Bir uzantıdan sembolü 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
sembolünü ekler. Bu, yeni kurallar, işlevler veya sabit değerler (örneğin, 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 çok sembol 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 en üst düzeyde görünmelidir. Bunlar bir işlev gövdesinde olamazlar.
load
öğesinin ilk bağımsız değişkeni, .bzl
dosyasını tanımlayan bir etikettir. Göreli etiketse geçerli bzl
dosyasını içeren pakete (dizine değil) göre çözümlenir. load
ifadelerindeki göreli etiketler, başında :
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")
Tek 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 sembol adları içerebilir. Aşağıdaki örnek tamamen yasaldır (ne zaman tırnak işareti kullanılacağını lütfen 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.
.bzl
dosyasını yükleyebilecek kişileri kısıtlamak için yükleme görünürlüğünü kullanabilirsiniz.
Derleme kuralı türleri
Oluşturma kurallarının çoğu, dile göre gruplanmış şekilde ailelerde bulunur. Örneğin cc_binary
, cc_library
ve cc_test
sırasıyla C++ ikili programları, kitaplıklar ve testler için derleme kurallarıdır. Diğer diller, aynı adlandırma şemasını farklı bir ön ekle kullanır (ör. Java için java_*
). Bu işlevlerden bazıları Ansiklopedi Oluşturma bölümünde açıklanmıştır, ancak isteyen 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 adla eklenir. Bu nedenle//my:program
, (örneğin)$(BINDIR)/my/program
konumunda görünür.Bazı dillerde bu tür kurallar, kurala ait bir
data
özelliğinde veya bağımlılıkların geçişli kapatılmasında bahsedilen tüm dosyaları içeren bir runfiles dizini de oluşturur. Bu dosyalar, üretime 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 yalnızca başarılı sonuç vermeyen programlardır.İkili programlar gibi testlerde de çalıştırma dosyaları ağaçları bulunur ve bunların altındaki dosyalar, testin çalışma zamanında yasal olarak açabileceği yegâne dosyalardır. Örneğin, bir
cc_test(name='x', data=['//foo:bar'])
programı yürütme sırasında$TEST_SRCDIR/workspace/foo/bar
açıp okuyabilir. (Her programlama dilinin,$TEST_SRCDIR
değerine erişmek için kendi yardımcı işlevi vardır ancak hepsi, doğrudan ortam değişkenini kullanmakla eşdeğerdir.) Kurala uyulmaması, uzaktan test ana makinesinde çalıştırıldığında 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ı olabilirken ikili programlar ve testler, beklenen ayrı derleme davranışıyla kitaplıklara bağlı olabilir.
Etiketler | Bağımlılıklar |