Bu sayfada, makrolar ve kurallar kullanarak BUILD dilinin nasıl genişletileceği açıklanmaktadır.
Bazel uzantıları .bzl
ile biten dosyalardır. Bir uzantıdan simgeyi içe aktarmak için load ifadesi kullanın.
Daha ileri düzey kavramları öğrenmeden önce şunları yapın:
Hem
BUILD
hem de.bzl
dosyalarında kullanılan Starlark dili hakkında bilgi edinin.İki
BUILD
dosyası arasında değişkenleri nasıl paylaşabileceğinizi öğrenin.
Makrolar ve kurallar
Makro, kuralları örneklendiren bir işlevdir. BUILD
dosyası çok tekrar eden veya karmaşık hale geldiğinde bazı kodları yeniden kullanmanıza olanak tanıdığından bu özellik kullanışlıdır. BUILD
dosyası okunur okunmaz işlev değerlendirilir. BUILD
dosyasının değerlendirilmesinden sonra Bazel, makrolar hakkında çok az bilgiye sahip olur: Makronuz bir genrule
oluşturuyorsa Bazel genrule
öğesini yazmışsınız gibi davranır. Bu nedenle, bazel query
yalnızca oluşturulan genrule
öğesini listeler.
Kural makrodan daha güçlüdür. Bazel dahililerine erişebilir ve neler olup bittiğini tam olarak denetleyebilir. Örneğin, bilgileri diğer kurallara iletebilir.
Basit mantığı yeniden kullanmak isterseniz bir makroyla başlayın. Bir makro karmaşık hale gelirse bunu bir kural haline getirmek genellikle iyi bir fikirdir. Yeni dil desteği genellikle bir kurala göre yapılır. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcının bir kural yazması gerekmez; yalnızca mevcut kuralları yükleyip çağırırlar.
Değerlendirme modeli
Yapı üç aşamadan oluşur.
Yükleme aşaması. İlk olarak, derleme için gereken tüm uzantıları ve tüm
BUILD
dosyalarını yükleyip değerlendirin.BUILD
dosyalarının yürütülmesi yalnızca kuralları gösterir (bir kural her çağrıldığında bir grafiğe eklenir). Makrolar burada değerlendirilir.Analiz aşaması. Kuralların kodu yürütülür (
implementation
işlevleri) ve işlemler örneklenir. İşlem, bir dizi girdiden bir çıkış kümesinin nasıl oluşturulacağını açıklar (ör. "hello.c'de gcc'yi çalıştır ve gethello.o"). Gerçek komutları çalıştırmadan önce hangi dosyaların oluşturulacağını açık bir şekilde listelemeniz gerekir. Başka bir deyişle analiz aşamasında, yükleme aşamasından oluşturulan grafik alınır ve bir eylem grafiği oluşturulur.Yürütme aşaması. Çıkışlarından en az biri gerekli olduğunda işlemler yürütülür. Bir dosya eksikse veya bir komut bir çıkış oluşturamıyorsa derleme başarısız olur. Bu aşamada testler de yürütülür.
Bazel, .bzl
dosyaları ile BUILD
dosyalarını okumak, ayrıştırmak ve değerlendirmek için paralellik kullanır. Bir dosya, derleme başına en fazla bir kez okunur ve değerlendirmenin sonucu önbelleğe alınır ve yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load()
ifadeleri) çözüldükten sonra değerlendirilir. Tasarım gereği, bir .bzl
dosyası yüklemenin görünür bir yan etkisi yoktur. Yalnızca değerleri ve işlevleri tanımlar.
Bazel akıllı davranmaya çalışır. Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini belirlemek için bağımlılık analizinden yararlanır. Örneğin, bir kural geçerli derleme için ihtiyacınız olmayan işlemler oluşturursa bu işlemler yürütülmez.
Uzantı oluşturma
Bazı kodları yeniden kullanmak için ilk makronuzu oluşturun. Ardından makrolar hakkında daha fazla bilgi edinin ve bunları "özel fiiller" oluşturmak için kullanma hakkında bilgi edinin.
Kuralları kullanmaya başlamak için kurallar eğitimini izleyin. Ardından, kural kavramları hakkında daha fazla bilgi edinebilirsiniz.
Kendi uzantılarınızı yazarken aşağıdaki iki bağlantı çok yararlı olacaktır. Kullanıcılara ulaşabilecekleri bir yerde olsun:
Daha ileri gidiyoruz
Makrolar ve kurallara ek olarak unsurlar ve depo kuralları yazmak isteyebilirsiniz.
Kodunuzu biçimlendirmek ve lint etmek için Buildifier'ı tutarlı şekilde kullanın.
.bzl
stil kılavuzundaki talimatları uygulayın.Kodunuzu test edin.
Kullanıcılarınıza yardımcı olacak dokümanlar oluşturun.
Kodunuzun performansını optimize edin.
Uzantılarınızı başkalarına dağıtın.