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. Bir uzantıdan simge içe aktarmak için yükleme ifadesi kullanın.
Daha ileri düzey kavramları öğrenmeden önce:
Starlark dili
BUILD
ve.bzl
dosyaları.İki
BUILD
dosyası arasında nasıl değişken paylaşabileceğinizi öğrenin.
Makrolar ve kurallar
Makro, kuralları örnekleyen 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. İşlev, BUILD
dosyası okunur okunmaz 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
. Sonuç olarak bazel query
yalnızca oluşturulan genrule
öğelerini listeler.
Kural, makrodan daha güçlüdür. Bazel'in dahili işlevlerine erişebilir ve neler olup bittiği üzerinde tam kontrole sahip olabilir. 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ı basitçe ö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. İşlem, bir giriş grubundan nasıl bir çıkış grubu oluşturulacağını açıklar (ör. "hello.c üzerinde gcc'yi çalıştır ve hello.o dosyasını al"). Oluşturma işleminden önce hangi dosyaların oluşturulacağını gerçek komutların çalıştırılmasına neden olur. Diğer bir deyişle, analiz aşaması, yükleme aşaması tarafından oluşturulan grafiği alır ve bir işlem grafiği oluşturur.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 komut bir çıkış oluşturamazsa derleme başarısız olur. Bu aşamada testler de yürütü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ınmış ve yeniden kullanılmış olabilir. Bir dosya tüm bağımlılıkları yalnızca bir kez değerlendirilir (load()
çözülmüştür. Tasarım gereği, .bzl
dosyasının yüklenmesi görünür bir yan etki oluşturmaz. 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ğitim videosunu 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 fazla bilgi
Makrolar ve kurallara ek olarak yönler ve depo kuralları da yazabilirsiniz.
Kodunuzu biçimlendirmek ve lintlemek 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şka kullanıcılara dağıtabilirsiniz.