Pertanyaan Umum (FAQ)

Laporkan masalah Lihat sumber {/18/}{/1/}

Berikut adalah beberapa masalah dan pertanyaan umum terkait menulis ekstensi.

Mengapa file saya tidak dihasilkan / tindakan saya tidak pernah dijalankan?

Bazel hanya menjalankan tindakan yang diperlukan untuk membuat file output yang diminta.

  • Jika file yang diinginkan memiliki label, Anda dapat memintanya secara langsung: bazel build //pkg:myfile.txt

  • Jika file tersebut 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 tersebut 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 implementasi saya tidak dijalankan?

Bazel hanya menganalisis target yang diminta untuk build. Anda harus memberi nama target pada command line, atau nama yang bergantung pada target.

File hilang ketika tindakan atau biner saya dieksekusi

Pastikan 1) file telah terdaftar sebagai input untuk tindakan atau biner, dan 2) skrip atau alat yang dieksekusi mengakses file menggunakan jalur yang benar.

Untuk tindakan, Anda mendeklarasikan input dengan meneruskannya ke fungsi ctx.actions.* yang membuat tindakan. Jalur yang benar untuk file ini 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. Gunakan File.short_path, bukan kolom path, yang merupakan jalur file yang terkait dengan 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 lain dari build Anda, 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 baik sebelum maupun selama fase eksekusi?

Anda dapat memformat data terstruktur sebagai file .bzl. Anda dapat melakukan load() file untuk mengaksesnya selama fase pemuatan dan analisis. Anda dapat meneruskannya sebagai input atau runfile ke tindakan dan file yang dapat dieksekusi yang membutuhkannya selama fase eksekusi.

Bagaimana cara mendokumentasikan kode Starlark?

Untuk aturan dan atribut aturan, Anda dapat meneruskan literal docstring (mungkin tanda kutip tiga kali) ke parameter doc dari rule atau attr.*(). Untuk fungsi bantuan dan makro, gunakan literal docstring tiga tanda kutip dengan mengikuti format yang diberikan di sini. Fungsi implementasi aturan umumnya tidak memerlukan docstring-nya sendiri.

Menggunakan literal string di tempat yang diharapkan akan memudahkan alat otomatis untuk mengekstrak dokumentasi. Jangan ragu untuk menggunakan komentar non-string standar apa pun yang dapat membantu pembaca kode Anda.