Yazma uzantılarıyla ilgili sık karşılaşılan sorunlar ve soruları aşağıda bulabilirsiniz.
Dosyam neden oluşturulmuyor veya işlemim neden hiç yürütülmüyor?
Bazel yalnızca istenen çı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
Hedefiniz komut satırında her bahsedildiğinde dosyanın otomatik olarak oluşturulmasını istiyorsanız
DefaultInfo
sağlayıcı döndürerek dosyayı 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. Komut satırında hedefi veya hedefe bağlı bir şeyi adlandırmanız gerekir.
İş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 ya da aracı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
komutuyla çalıştırılan yürütülebilir çıkışlar) için girişleri runfiles'a dahil ederek beyan edersiniz. path
alanı yerine, ikilinin yürütüldüğü runfiles dizinine göre dosyanın yolu olan File.short_path
'ı kullanın.
Hangi dosyaların bazel build //pkg:mytarget
tarafından oluşturulacağını nasıl kontrol edebilirim?
DefaultInfo
sağlayıcısını kullanarak varsayılan çıkışları ayarlayın.
Derlememin bir parçası olarak nasıl program çalıştırabilir veya dosya G/Ç'si yapabilirim?
Bir araç, derlemenizin diğer tüm bölümleri gibi hedef olarak bildirilebilir 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 işlem oluşturmak için ctx.actions.run
kullanın ve aracı executable
parametresi olarak iletin.
Yükleme ve analiz aşamalarında bir araç çalıştırılamaz ve dosya G/Ç işlemi gerçekleştirilemez. Bu, araçların ve dosya içeriklerinin (BUILD ve .bzl dosyalarının içerikleri hariç) hedef ve işlem grafiklerinin oluşturulma şeklini etkileyemeyeceği anlamına gelir.
Aynı yapılandırılmış verilere hem yürütme aşamasından önce hem de bu aşama sırasında erişmem gerekirse ne yapmalıyım?
Yapılandırılmış verileri .bzl dosyası olarak biçimlendirebilirsiniz. Yükleme ve analiz aşamalarında dosyaya erişmek için load()
yapabilirsiniz. Yürütme aşamasında ihtiyaç duyan işlemler ve yürütülebilir dosyalar için giriş veya runfile olarak iletebilirsiniz.
Starlark kodunu nasıl belgelemeliyim?
Kurallar ve kural özellikleri için rule
veya attr.*()
işlevinin doc
parametresine bir docstring değişmezi (üç tırnaklı olabilir) iletebilirsiniz. Yardımcı işlevler ve makrolar için burada verilen biçimi izleyen üç tırnaklı bir docstring değişmezi kullanın.
Kural uygulama işlevlerinin genellikle kendi docstring'lerine ihtiyacı yoktur.
Dize değişmezlerini beklenen yerlerde kullanmak, otomatik araçların dokümanları ayıklamasını kolaylaştırır. Kodunuzu okuyan kişiye yardımcı olabileceği her yerde standart olmayan dize yorumlarını kullanabilirsiniz.