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 ileri seviye kavramları öğrenmeden önce:
Hem
BUILD
hem de.bzl
dosyalarında kullanılan Starlark dili hakkında bilgi edinin.İki
BUILD
dosyası 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ığı için 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, diğer kurallara bilgi aktarabilir.
Basit mantığı yeniden kullanmak istiyorsanız bir makroyla başlayın. 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
BUILD
dosyalarını yükleyip değerlendirin.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 (
implementation
işlevi) yürütülür ve işlemler örneklenir. İş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"). 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 ihtiyaç duymadığınız 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ğitim videosunu 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.
.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ğıtın.