DERLEME dosyaları

Ö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