Berikut beberapa masalah dan pertanyaan umum terkait penulisan ekstensi.
Mengapa file saya tidak dibuat / tindakan saya tidak pernah dieksekusi?
Bazel hanya mengeksekusi tindakan yang diperlukan untuk menghasilkan file output yang diminta.
Jika file yang Anda inginkan memiliki label, Anda dapat memintanya secara langsung:
bazel build //pkg:myfile.txt
Jika file berada dalam grup output target, Anda mungkin perlu menentukan grup output tersebut di command line:
bazel build //pkg:mytarget --output_groups=foo
Jika Anda ingin file dibuat secara otomatis setiap kali target Anda disebutkan di command line, tambahkan ke output default aturan Anda dengan menampilkan penyedia
DefaultInfo
.
Lihat halaman Aturan untuk mengetahui informasi selengkapnya.
Mengapa fungsi penerapan saya tidak dijalankan?
Bazel hanya menganalisis target yang diminta untuk build. Anda harus memberi nama target di command line, atau sesuatu yang bergantung pada target.
File tidak ada saat tindakan atau biner saya dieksekusi
Pastikan bahwa 1) file telah didaftarkan sebagai input ke tindakan atau biner, dan 2) skrip atau alat yang sedang dijalankan mengakses file menggunakan jalur yang benar.
Untuk tindakan, Anda mendeklarasikan input dengan meneruskannya ke fungsi ctx.actions.*
yang membuat tindakan. Jalur yang tepat untuk file dapat diperoleh menggunakan
File.path
.
Untuk biner (output yang dapat dieksekusi yang dijalankan oleh perintah bazel run
atau bazel test
), Anda mendeklarasikan input dengan menyertakannya dalam runfiles. Daripada menggunakan kolom path
, gunakan
File.short_path
, yang merupakan jalur file relatif terhadap
direktori runfiles tempat biner dieksekusi.
Bagaimana cara mengontrol file mana yang dibuat oleh bazel build //pkg:mytarget
?
Gunakan penyedia DefaultInfo
untuk
menetapkan output default.
Bagaimana cara menjalankan program atau melakukan I/O file sebagai bagian dari build saya?
Alat dapat dideklarasikan sebagai target, seperti bagian build lainnya, dan dijalankan selama fase eksekusi untuk membantu membangun target lain. Untuk membuat tindakan
yang menjalankan alat, gunakan ctx.actions.run
dan teruskan
alat sebagai parameter executable
.
Selama fase pemuatan dan analisis, alat tidak dapat berjalan, dan Anda juga tidak dapat melakukan I/O file. Artinya, alat dan konten file (kecuali konten file BUILD dan .bzl) tidak dapat memengaruhi cara pembuatan grafik target dan tindakan.
Bagaimana jika saya perlu mengakses data terstruktur yang sama sebelum dan selama fase eksekusi?
Anda dapat memformat data terstruktur sebagai file .bzl. Anda dapat load()
file untuk
mengaksesnya selama fase pemuatan dan analisis. Anda dapat meneruskannya sebagai input atau
runfile ke tindakan dan file yang dapat dieksekusi yang memerlukannya selama fase eksekusi.
Bagaimana cara mendokumentasikan kode Starlark?
Untuk aturan dan atribut aturan, Anda dapat meneruskan literal docstring (mungkin
dengan tanda petik tiga) ke parameter doc
dari rule
atau attr.*()
. Untuk fungsi dan makro helper, gunakan literal docstring yang dikutip tiga kali mengikuti format yang diberikan di sini.
Fungsi penerapan aturan umumnya tidak memerlukan docstring sendiri.
Menggunakan literal string di tempat yang diharapkan akan memudahkan alat otomatis mengekstraksi dokumentasi. Jangan ragu untuk menggunakan komentar non-string standar di mana pun komentar tersebut dapat membantu pembaca kode Anda.