Yazma uzantılarıyla ilgili sık karşılaşılan bazı sorunlar ve sorular aşağıda açıklanmıştır.
Dosyam neden üretilmiyor / işlem hiç uygulanmıyor?
Bazel yalnızca isteklenen çıkış dosyalarını oluşturmak için gereken işlemleri yürütür.
İstediğiniz dosyada etiket varsa doğrudan isteyebilirsiniz:
bazel build //pkg:myfile.txt
Dosya, hedefin bir çıkış grubundaysa komut satırında bu çıkış grubunu belirtmeniz gerekebilir:
bazel build //pkg:mytarget --output_groups=foo
Dosyanın, komut satırında hedefinizden bahsedildiğinde otomatik olarak oluşturulmasını istiyorsanız bir
DefaultInfo
sağlayıcı döndürerek kuralınızın varsayılan çıkışlarına ekleyin.
Daha fazla bilgi için Kurallar sayfasına bakın.
Uygulama işlevim neden yürütülmüyor?
Bazel yalnızca derleme için istenen hedefleri analiz eder. Hedefi komut satırında adlandırmalı veya hedefe bağlı bir adlandırma yapmalısınız.
İşlemim veya ikili dosyam yürütülürken bir dosya eksik
1) Dosyanın işleme veya ikili dosyaya giriş olarak kaydedildiğinden ve 2) yürütülen komut dosyasının veya aracının dosyaya doğru yolu kullanarak eriştiğinden emin olun.
İşlemler için girişleri, işlemi oluşturan ctx.actions.*
işlevine ileterek bildirirsiniz. Dosyanın doğru yolu File.path
kullanılarak elde edilebilir.
İkili dosyalar (bazel run
veya bazel test
komutu tarafından çalıştırılan yürütülebilir çıkışlar) için girişleri runfiles ekleyerek bildirirsiniz. path
alanı yerine File.short_path
kullanın. Bu, dosyanın ikili dosyanın yürütüldüğü runfiles dizine göreli yoludur.
bazel build //pkg:mytarget
tarafından hangi dosyaların derleneceğini nasıl kontrol edebilirim?
Varsayılan çıkışları ayarlamak için DefaultInfo
sağlayıcısını kullanın.
Derlememin bir parçası olarak nasıl program çalıştırabilir veya dosya G/Ç işlemi yapabilirim?
Bir araç, derlemenizin diğer tüm bölümleri gibi hedef olarak tanımlanabilir ve diğer hedeflerin oluşturulmasına yardımcı olmak için yürütme aşamasında çalıştırılabilir. Bir aracı çalıştıran bir işlem oluşturmak için ctx.actions.run
kullanın ve aracı executable
parametresi olarak iletin.
Yükleme ve analiz aşamaları sırasında bir araç çalışamaz ve dosya G/Ç işlemi yapamazsınız. Bu, araçlar ve dosya içeriklerinin (BUILD ve .bzl dosyalarının içerikleri hariç) hedef ve işlem grafiklerinin nasıl oluşturulduğunu etkileyemeyeceği anlamına gelir.
Hem yürütme aşamasından önce hem de yürütme aşamasında aynı yapılandırılmış verilere erişmem gerekirse ne olur?
Yapılandırılmış verileri .bzl dosyası olarak biçimlendirebilirsiniz. Yükleme ve analiz aşamalarında dosyaya erişmek için dosyayı load()
yapabilirsiniz. Bu dosyayı, yürütme aşamasında ihtiyaç duyan işlemlere ve yürütülebilir dosyalara giriş veya çalıştırma dosyası olarak iletebilirsiniz.
Starlark kodunu nasıl belgelemeliyim?
Kurallar ve kural özellikleri için rule
veya attr.*()
'nin doc
parametresine bir docstring değişmezi (olasılıkla üçlü tırnak içinde) iletebilirsiniz. Yardımcı işlevler ve makrolar için burada verilen biçimi uygulayarak üçlü tırnak içine alınmış bir docstring değişmezi kullanın.
Kural uygulama işlevlerinin genellikle kendi açıklama metinlerine ihtiyacı yoktur.
Beklenen yerlerde dize değişmezleri kullanmak, otomatik araçları dokümanları ayıklamak için daha kolay hale getirir. Kodunuzu okuyan kullanıcıya yardımcı olabileceği her yerde standart olmayan dize dışı yorumları kullanabilirsiniz.