Uzantılara Genel Bakış

Sorun bildirin Kaynağı göster Gece · 7,4 , 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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:

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

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.