DERLEME dosyaları

Sorun bildirin Kaynağı göster

Ö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