Bu sayfada, makrolar ve kurallar kullanılarak DERLEME dilinin nasıl genişletileceği açıklanmaktadır.
Bazel uzantıları
.bzl ile biten dosyalardır. Bir uzantıdan sembolü içe aktarmak için yükleme ifadesi kullanın.
Daha ileri düzey kavramları öğrenmeden önce:
Hem
BUILDhem de
.bzldosyalarında kullanılan Starlark dili hakkında bilgi edinin.
İki
BUILDdosyası arasında değişkenleri nasıl paylaşabileceğinizi öğrenin.
Makrolar ve kurallar
Makro, kuralları somutlaştıran bir işlevdir.
BUILD dosyası çok fazla tekrarlanan veya karmaşık hale geldiğinde, bazı kodları yeniden kullanmanıza izin verdiğinden kullanışlıdır. İşlev,
BUILD dosyası okunur okunmaz değerlendirilir.
BUILD dosyasının değerlendirilmesinin ardından Bazel, makrolar hakkında çok az bilgiye sahip oldu: Makronuz
genrule oluşturuyorsa Bazel,
genrule öğesini yazarmışsınız gibi davranır. Bu nedenle,
bazel query yalnızca oluşturulan
genrule öğelerini listeler.
Kural, makrodan daha güçlüdür. Bu uygulama, Bazel dahili ürünlerine erişebilir ve neler olup bittiği konusunda tam kontrol sahibidir. Örneğin, bilgileri başka kurallara iletebilir.
Basit mantığı yeniden kullanmak istiyorsanız bir makroyla başlayın. Bir makro karmaşık hale gelirse onu kurala koymak genellikle iyi bir fikirdir. Yeni dil için destek genellikle bir kuralla gerçekleştirilir. Kurallar ileri düzey kullanıcılar içindir ve çoğu kullanıcının hiçbir zaman bir kural yazması gerekmez; yalnızca mevcut kuralları yükleyip çağırırlar.
Değerlendirme modeli
Derleme üç aşamadan oluşur.
Yükleme aşaması. İlk olarak derleme için gerekli olan tüm uzantıları ve tüm
BUILDdosyalarını yükleyip değerlendirin.
BUILDdosyalarının yürütülmesi, basitçe kuralları gösterir (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 (
implementationişlevi) ve işlemler örneklenir. Bir eylem, "hello.c'de gcc'yi çalıştır ve gethello.o" gibi bir giriş kümesinden bir dizi çıkışın nasıl oluşturulacağını açıklar. Asıl komutları yürütmeden önce hangi dosyaların oluşturulacağını açıkça listelemeniz gerekir. Başka bir deyişle, analiz aşamasında yükleme aşaması tarafından oluşturulan grafiği alır ve bir eylem grafiği oluşturur.
Yürütme aşamasında. İşlemler, çıktılarından en az biri gerekli olduğunda yürütülür. Bir dosya eksikse veya bir komut tek bir çıkış oluşturamazsa derleme başarısız olur. Testler de bu aşamada çalıştırılır.
Bazel,
.bzl dosyaları ile
BUILD dosyalarını okumak, ayrıştırmak ve değerlendirmek için paralellikten yararlanır. Bir dosya, derleme başına en fazla bir kez okunur ve değerlendirme sonucu önbelleğe alınır ve yeniden kullanılır. Bir dosya yalnızca tüm bağımlılıkları (
load() ifadeleri) çözümlendikten sonra değerlendirilir. Tasarım gereği, bir
.bzl dosyasının yüklenmesinin görünür yan etkisi yoktur, yalnızca değer ve işlevleri tanımlar.
Bazel zeki olmaya çalışır. Hangi dosyaların yüklenmesi, hangi kuralların analiz edilmesi ve hangi işlemlerin yürütülmesi gerektiğini anlamak için bağımlılık analizinden yararlanı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
Kendi uzantılarınızı yazarken aşağıdaki iki bağlantı çok yararlı olacaktır. Bunların erişilebilir olmasını sağlayın: