Bu sayfada, makrolar ve kurallar kullanılarak DERLEME dilinin nasıl genişletileceği açıklanmaktadır.
Bazel uzantıları .bzl
ile biten dosyalardır. Bir uzantıdan sembolü içe aktarmak için yükleme ifadesi kullanın.
Daha ileri düzey kavramları öğrenmeden önce:
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ı somutlaştıran bir işlevdir. BUILD
dosyası çok fazla tekrarlanan veya karmaşık hale geldiğinde, bazı kodları yeniden kullanmanıza izin verdiğinden kullanışlıdır. İşlev, BUILD
dosyası okunur okunmaz değerlendirilir. BUILD
dosyasının değerlendirilmesinin ardından Bazel, makrolar hakkında çok az bilgiye sahip oldu: Makronuz genrule
oluşturuyorsa Bazel, genrule
öğesini yazarmışsınız gibi davranır. Bu nedenle, bazel query
yalnızca oluşturulan genrule
öğelerini listeler.
Kural, makrodan daha güçlüdür. Bu uygulama, Bazel dahili ürünlerine erişebilir ve neler olup bittiği konusunda tam kontrol sahibidir. Örneğin, bilgileri başka kurallara iletebilir.
Basit mantığı yeniden kullanmak istiyorsanız bir makroyla başlayın. Bir makro karmaşık hale gelirse onu kurala koymak genellikle iyi bir fikirdir. Yeni dil için destek genellikle bir kuralla gerçekleştirilir. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcının hiçbir zaman bir kural yazması gerekmez; yalnızca mevcut kuralları yükleyip çağırırlar.
Değerlendirme modeli
Derleme üç aşamadan oluşur.
Yükleme aşaması. İlk olarak derleme için gerekli olan tüm uzantıları ve tüm
BUILD
dosyalarını yükleyip değerlendirin.BUILD
dosyalarının yürütülmesi, basitçe 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şlevi) ve işlemler örneklenir. Bir eylem, "hello.c'de gcc'yi çalıştır ve gethello.o" gibi bir giriş kümesinden bir dizi çıkışın nasıl oluşturulacağını açıklar. Asıl komutları yürütmeden önce hangi dosyaların oluşturulacağını açıkça listelemeniz gerekir. Başka bir deyişle, analiz aşamasında yükleme aşaması tarafından oluşturulan grafiği alır ve bir eylem grafiği oluşturur.Yürütme aşamasında. İşlemler, çıktılarından en az biri gerekli olduğunda yürütülür. Bir dosya eksikse veya bir komut tek bir çıkış oluşturamazsa derleme başarısız olur. Testler de bu aşamada çalıştırılır.
Bazel, .bzl
dosyaları ile BUILD
dosyalarını okumak, ayrıştırmak ve değerlendirmek için paralellikten yararlanır. Bir dosya, derleme başına en fazla bir kez okunur ve değerlendirme sonucu önbelleğe alınır ve yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load()
ifadeleri) çözümlendikten sonra değerlendirilir. Tasarım gereği, bir .bzl
dosyasının yüklenmesinin görünür yan etkisi yoktur, yalnızca değer ve işlevleri tanımlar.
Bazel zeki olmaya çalışır. Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini anlamak için bağımlılık analizinden yararlanır. Örneğin, bir kural mevcut derleme için ihtiyacınız olmayan işlemler oluşturursa bu işlemler yürütülmez.
Uzantı oluşturma
Bir kısmını yeniden kullanmak için ilk makronuzu oluşturun. Ardından, makrolar ve "özel fiiller" oluşturmak için bunları kullanma hakkında daha fazla bilgi edinin.
Kuralları kullanmaya başlamak için kurallar eğitimini izleyin. Sonraki bölümde, kural kavramları hakkında daha fazla bilgi edinebilirsiniz.
Kendi uzantılarınızı yazarken aşağıdaki iki bağlantı çok yararlı olacaktır. Bunların erişilebilir olmasını sağlayın:
Daha ileri
Makrolar ve kurallara ek olarak özellikler ve depo kuralları yazmak isteyebilirsiniz.
Kodunuzu biçimlendirmek ve kodda hata ayıklamak için Buildifier'ı düzenli olarak 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şka kullanıcılara dağıtın.