Bu sayfada, makrolar ve kurallar kullanılarak BUILD dilinin nasıl genişletileceği açıklanmaktadır.
Bazel uzantıları, .bzl ile biten dosyalardır. Bir uzantıdan simge içe aktarmak için yükleme ifadesi kullanın.
Daha gelişmiş kavramları öğrenmeden önce:
Hem
BUILDhem de.bzldosyalarında kullanılan Starlark dili hakkında bilgi edinin.İki
BUILDdosyası arasında nasıl değişken paylaşabileceğinizi öğrenin.
Makrolar ve kurallar
Makro, kuralları örnekleyen bir işlevdir. Makrolar iki türdedir: sembolik makrolar (Bazel 8'de yeni) ve eski makrolar. İki makro türü farklı şekilde tanımlanır ancak kullanıcı açısından neredeyse aynı şekilde çalışır. Makro, bazı kodları yeniden kullanmanıza olanak tanıdığından BUILD dosyası çok tekrarlı veya çok karmaşık hale geldiğinde kullanışlıdır. İşlev, BUILD dosyası okunur okunmaz değerlendirilir. BUILD dosyası değerlendirildikten sonra Bazel, makrolar hakkında çok az bilgiye sahip olur. Makronuz bir genrule oluşturursa Bazel, genrule öğesini BUILD dosyasında tanımlamışsınız gibi neredeyse aynı şekilde davranır. (Tek istisna, sembolik bir makroda tanımlanan hedeflerin özel görünürlük semantiği olmasıdır: Sembolik makro, dahili hedeflerini paketin geri kalanından gizleyebilir.)
Kural, makrodan daha güçlüdür. Bazel'in dahili işlevlerine 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 bir makroyla başlayın. Daha eski Bazel sürümlerini desteklemeniz gerekmiyorsa sembolik makro kullanmanızı öneririz. Karmaşık hale gelen makroları kurala dönüştürmek genellikle iyi bir fikirdir. Yeni bir dil için destek genellikle bir kuralla sağlanır. Kurallar, ileri düzey kullanıcılar içindir. Çoğu kullanıcının kural yazması gerekmez. Yalnızca mevcut kuralları yükleyip çağırabilirler.
Değerlendirme modeli
Derleme üç aşamadan oluşur.
Yükleme aşaması. Öncelikle, derleme için gereken tüm uzantıları ve tüm
BUILDdosyaları yükleyip değerlendirin.BUILDdosyaları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 (
implementationişlevi) yürütülür ve işlemler örneklenir. İşlemler, 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"). Gerçek komutları yürütmeden önce hangi dosyaların oluşturulacağını açıkça listelemeniz gerekir. 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ı. İş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 çalıştırı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ınıp yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (load() ifadesi) çözüldükten sonra değerlendirilir. Tasarım gereği, .bzl dosyasının yüklenmesi görünür bir yan etkiye sahip değildir. 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 öğrenmek için bağımlılık analizini kullanır. Örneğin, bir kural mevcut 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ğitimlerini izleyin. Ardından, kural kavramları hakkında daha fazla bilgi edinebilirsiniz.
Aşağıdaki iki bağlantı, kendi uzantılarınızı yazarken çok faydalı olacaktır. Bunları elinizin altında tutun:
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.
.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şka kullanıcılara dağıtın.