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
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ş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.genrule
genrule
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
BUILD
dosyaları yükleyip değerlendirin.BUILD
dosyaları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 (
implementation
iş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.
.bzl
Stil 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.