Bu sayfada, makro kullanarak BUILD dilinin nasıl genişletileceği açıklanmaktadır emin olmanız gerekir.
Bazel uzantıları .bzl
ile biten dosyalardır. Tekliflerinizi otomatikleştirmek ve optimize etmek için
load ifadesi kullanarak bir uzantıdan simge içe aktarın.
Daha ileri düzey kavramları öğrenmeden önce şunları yapın:
Starlark dili
BUILD
ve.bzl
dosyaları.Değişkenleri nasıl paylaşabileceğinizi öğrenin. iki
BUILD
dosyası arasında.
Makrolar ve kurallar
Makro, kuralları örneklendiren bir işlevdir. Bir kullanıcının
BUILD
dosya, yeniden kullanmanıza olanak tanıdığı için çok fazla tekrarlanıyor veya karmaşık hale geliyor
kullanabilirsiniz. BUILD
dosyası okunur okunmaz işlev değerlendirilir. Şu tarihten sonra:
BUILD
dosyasının değerlendirilmesinden sonra Bazel'in makrolar hakkında çok az bilgisi vardır:
makronuz bir genrule
oluşturuyorsa Bazel,
genrule
. Bu nedenle, bazel query
yalnızca oluşturulan genrule
öğesini listeler.
Kural makrodan daha güçlüdür. Bazel'a erişebilir ve neler olup bittiğini tam olarak kontrol ederler. Bu, örneğin nasıl aktaracağınızı öğreneceksiniz.
Basit mantığı yeniden kullanmak isterseniz bir makroyla başlayın. Bir makro bunu bir kural haline getirmek genellikle iyi bir fikirdir. Yeni dil desteği genellikle bir kuralla yapılır. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcıların bir e-posta yazmak zorunda kalmayacağını var olan telefon numarasını arayarak kurallar.
Değerlendirme modeli
Yapı üç aşamadan oluşur.
Yükleme aşaması. İlk olarak, tüm uzantıları ve tüm
BUILD
uzantılarını yükleyip değerlendirin ve derleme dosyasıdır.BUILD
dosyalarının yürütülmesi kuralları örneklendirir (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 örneklendirilir. Bir eylemde, projenin başarısı için "hello.c'de gcc'yi çalıştır ve al merhaba.o" şeklinde bir ifade içerir. Oluşturma işleminden önce hangi dosyaların oluşturulacağını gerçek komutların çalıştırılmasına neden olur. Başka bir deyişle analiz aşaması yükleme aşamasında oluşturulan grafik ile bir eylem grafiği oluşturulur.Yürütme aşaması. Çıkışlarından en az biri şu olduğunda işlemler yürütülür gereklidir. Bir dosya eksikse veya bir komutun çıkış oluşturamaması durumunda başarısız olur. Bu aşamada testler de yürütülür.
Bazel, .bzl
dosyalarını ve BUILD
dosyalarını okumak, ayrıştırmak ve değerlendirmek için paralellik kullanıyor.
dosyası olarak da kaydedebilir. Bir dosya derleme başına en fazla bir kez okunur ve değerlendirmenin sonucu
önbelleğe alınmış ve yeniden kullanılmış olabilir. Bir dosya tüm bağımlılıkları yalnızca bir kez değerlendirilir (load()
çözüldüğünden emin olun. Tasarım gereği, .bzl
dosyası yüklendiğinde görünür
yalnızca değerleri ve işlevleri tanımlar.
Bazel zekice davranmaya çalışıyor: Bağımlılık analizini kullanarak hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi gerektiği ve hangi işlemlerin yürütülmesi gerektiği. Örneğin, Örneğin, bir kural geçerli derleme için ihtiyacınız olmayan işlemler oluşturursa bu belgeler yürütülmeyecek.
Uzantı oluşturma
İlk makronuzu oluşturun: bir kod kullanabilirsiniz. Ardından makrolar hakkında daha fazla bilgi edinin ve "özel fiiller" oluşturmak için bunları kullanmak.
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. Sakla şu özelliklere sahip olmalıdır:
Daha ileri gidiyoruz
Makrolara ve kurallara ek olarak en önemli noktaları ve depo kurallarını içerir.
Buildifier'ı kullanma ve lintörler oluşturmanız gerekir.
.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.