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 sembol içe aktarmak için yükleme ifadesi kullanın.
Daha ileri düzey kavramları öğrenmeden önce:
Hem
BUILDhem de.bzldosyalarında kullanılan Starlark dili hakkında bilgi edinin.İki
BUILDdosyası arasında değişkenleri nasıl paylaşacağınızı öğrenin.
Makrolar ve kurallar
Makro, kuralları örnekleyen bir işlevdir. Bu özellik, BUILD dosyası çok fazla tekrar içerdiğinde veya çok karmaşık olduğunda kullanışlıdır. Çünkü bazı kodları yeniden kullanmanıza olanak tanır. İşlev, BUILD dosyası okunur okunmaz değerlendirilir. Bazel, BUILD dosyası değerlendirildikten sonra makrolar hakkında çok az bilgiye sahip olur:
Makronuz bir BUILD oluşturursa Bazel, BUILD yazmışsınız gibi davranır.genrulegenrule Bu nedenle, bazel query yalnızca oluşturulan genrule listelenir.
Kural, makrodan daha güçlüdür. Bazel'in iç işleyişine erişebilir ve neler olup bittiği üzerinde tam kontrole sahip olabilir. Örneğin, bilgileri diğer kurallara iletebilir.
Basit mantığı yeniden kullanmak istiyorsanız makroyla başlayın. Bir makro karmaşık hale gelirse genellikle onu kurala dönüştürmek iyi bir fikirdir. Yeni bir dil için destek genellikle bir kural aracılığıyla sağlanır. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcı hiçbir zaman kural yazmak zorunda kalmaz. Yalnızca mevcut kuralları yükleyip çağırırlar.
Değerlendirme modeli
Derleme üç aşamadan oluşur.
Yükleme aşaması. Öncelikle, tüm uzantıları ve derleme için gereken tüm
BUILDdosyaları yükleyip değerlendirin.BUILDdosyalarının yürütülmesi yalnızca kuralları başlatır (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 (
implementationişlevleri) ve işlemler oluşturulur. Bir işlem, bir dizi girişten nasıl bir dizi çıkış oluşturulacağını açıklar. Örneğin, "hello.c üzerinde gcc'yi çalıştır ve hello.o'yu al". Gerçek komutları yürütmeden önce hangi dosyaların oluşturulacağını açıkça belirtmeniz gerekir. Başka bir deyişle, analiz aşaması, yükleme aşamasında oluşturulan grafiği alır ve bir işlem grafiği oluşturur.Yürütme aşaması. İşlemler, çıkışlarından en az biri gerektiğinde yürütülür. Bir dosya eksikse veya bir komut bir çıkış oluşturamazsa derleme başarısız olur. Bu aşamada testler de yapılır.
Bazel, .bzl ve 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ınarak yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load()
ifadeler) çözüldükten sonra değerlendirilir. .bzl dosyasının yüklenmesi, tasarım gereği görünür bir yan etkiye neden olmaz. Yalnızca değerleri ve işlevleri tanımlar.
Bazel akıllı olmaya çalışır: Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini bilmek için bağımlılık analizini kullanı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 "özel fiiller" oluşturmak için bunları kullanmayı öğrenin.
Kuralları kullanmaya başlamak için kurallar eğitimini inceleyin. Ardından, kurallarla ilgili kavramlar hakkında daha fazla bilgi edinebilirsiniz.
Kendi uzantılarınızı yazarken aşağıdaki iki bağlantıdan çok faydalanabilirsiniz. Erişebileceğiniz bir yerde saklayın:
Daha fazlasını yapma
Makrolara ve kurallara ek olarak yönler ve depo kuralları da yazmak isteyebilirsiniz.
Kodunuzu biçimlendirmek ve lint'lemek için Buildifier'ı tutarlı bir şekilde kullanın.
.bzlStil kılavuzunu uygulayın.Kodunuzu test edin.
Kullanıcılarınıza yardımcı olmak için doküman oluşturun.
Kodunuzun performansını optimize edin.
Uzantılarınızı başkalarıyla paylaşın.