Sık Sorulan Sorular

Uzantı yazmayla ilgili bazı yaygın sorunlar ve sorular aşağıda verilmiştir.

Dosyam neden üretilmiyor / işlemim neden hiç yürütülmüyor?

Bazel, yalnızca istenen çıkış dosyalarını üretmek için gereken işlemleri yürütür.

  • İstediğiniz dosyanın etiketi varsa bu etiketi doğrudan isteyebilirsiniz: bazel build //pkg:myfile.txt

  • Dosya hedefin bir çıkış grubundaysa bu çıkış grubunu komut satırında belirtmeniz gerekebilir: bazel build //pkg:mytarget --output_groups=foo

  • Komut satırında hedefinizden bahsedildiğinde dosyanın otomatik olarak oluşturulmasını istiyorsanız bir DefaultInfo sağlayıcısı 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. Hedefi komut satırında veya hedefe bağlı bir şekilde adlandırmanız gerekir.

İşlemim veya ikili program yürütüldüğünde bir dosya eksik

1) Dosyanın işleme veya ikili program için giriş olarak kaydedildiğinden ve 2) çalıştırılmakta olan komut dosyasının veya 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 tanımlarsınız. Dosya için doğru yol, File.path kullanılarak elde edilebilir.

İkili programlar (bazel run veya bazel test komutu tarafından çalıştırılan yürütülebilir çıkışlar) için girişleri runfiles'a dahil ederek açıklarsınız. path alanını kullanmak yerine File.short_path kullanın. Bu, ikili programın yürütüldüğü runfiles dizinine göre dosya yoludur.

Hangi dosyaların bazel build //pkg:mytarget tarafından oluşturulacağını nasıl kontrol edebilirim?

Varsayılan çıkışları ayarlamak için DefaultInfo sağlayıcısını kullanın.

Derlememin parçası olarak bir programı nasıl çalıştırabilirim veya G/Ç dosyasını nasıl çalıştırabilirim?

Bir araç, derlemenizin diğer bölümleri gibi hedef olarak tanımlanabilir ve diğer hedefleri oluşturmanıza yardımcı olması için yürütme aşamasında çalıştırılabilir. Araç çalıştıran bir işlem oluşturmak için ctx.actions.run kullanın ve araçta executable parametresi olarak iletin.

Yükleme ve analiz aşamaları sırasında bir araç çalışamaz veya dosya G/Ç işlemi gerçekleştiremezsiniz. Diğer bir deyişle, araçlar ve dosya içerikleri (BUILD ve .bzl dosyalarının içerikleri hariç), hedef ve eylem grafiklerinin oluşturulma şeklini etkileyemez.

Yürütme aşamasında ve öncesinde aynı yapılandırılmış verilere erişmem gerekiyorsa ne olur?

Yapılandırılmış verileri .bzl dosyası olarak biçimlendirebilirsiniz. Yükleme ve analiz aşamalarında dosyaya load() erişebilirsiniz. Dosyayı, yürütme aşamasında ihtiyaç duyulan işlemlere ve yürütülebilir dosyalara giriş veya çalıştırma dosyası olarak aktarabilirsiniz.

Starlark kodunu nasıl belgelemeliyim?

Kurallar ve kural özellikleri için rule veya attr.*() değerindeki doc parametresine bir doküman dizesi sabit değerini (büyük olasılıkla üç tırnak içinde) aktarabilirsiniz. Yardımcı işlevler ve makrolar için burada verilen biçimi izleyerek üç tırnaklı bir docstring sabit değeri kullanın. Kural uygulama işlevleri genellikle kendi docstring'e ihtiyaç duymaz.

Beklenen yerlerde dize değişmez değerlerinin kullanılması, otomatik araçların belgeleri çıkarmasını kolaylaştırır. Kodunuzu okuyan kullanıcıların işine yarayabilecek yerlerde, dize olmayan standart yorumları kullanabilirsiniz.