Bagian ini menentukan berbagai istilah dan konsep yang umum untuk berbagai fungsi atau aturan build.
Daftar Isi
- Tokenisasi Bourne shell
- Perluasan Label
- Atribut umum yang ditentukan oleh sebagian besar aturan build
- Atribut yang umum untuk semua aturan build
- Atribut yang sama untuk semua aturan pengujian (*_test)
- Atribut yang sama untuk semua aturan biner (*_binary)
- Atribut yang dapat dikonfigurasi
- Target output implisit
Tokenisasi Bourne shell
Atribut string tertentu dari beberapa aturan dibagi menjadi beberapa kata sesuai dengan aturan tokenisasi shell Bourne: spasi tanpa tanda kutip membatasi kata yang terpisah, dan karakter tanda kutip tunggal dan ganda serta garis miring terbalik digunakan untuk mencegah tokenisasi.
Atribut-atribut yang terkena tokenisasi ini secara eksplisit dinyatakan demikian dalam definisinya dalam dokumen ini.
Atribut yang tunduk pada perluasan variabel "Make" dan tokenisasi
shell Bourne biasanya digunakan untuk meneruskan opsi arbitrer ke
compiler dan alat lainnya. Contoh atribut tersebut adalah
cc_library.copts
dan java_library.javacopts
.
Bersama-sama, substitusi ini memungkinkan
variabel string tunggal diperluas ke daftar
kata opsi khusus konfigurasi.
Perluasan label
Beberapa atribut string dari beberapa aturan dapat mengalami perluasan label: jika string tersebut berisi label yang valid sebagai substring, misalnya //mypkg:target
, dan label tersebut merupakan prasyarat yang dideklarasikan dari aturan saat ini, string tersebut akan diperluas ke nama jalur file yang diwakili oleh //mypkg:target
target.
Contoh atribut meliputi genrule.cmd
dan
cc_binary.linkopts
. Detailnya dapat sangat bervariasi dalam
setiap kasus, terkait masalah seperti: apakah label relatif
diperluas; bagaimana label yang diperluas ke beberapa file
diperlakukan, dll. Lihat dokumentasi atribut aturan untuk
hal-hal tertentu.
Atribut umum yang ditentukan oleh sebagian besar aturan build
Bagian ini menjelaskan atribut yang ditentukan oleh banyak aturan build, tetapi tidak semua.
Atribut | Deskripsi |
---|---|
data |
File yang diperlukan oleh aturan ini pada runtime. Dapat mencantumkan target aturan atau file. Umumnya mengizinkan semua target.
Output dan runfile default target dalam atribut
Aturan baru harus menentukan atribut |
deps |
Dependensi untuk target ini. Umumnya hanya boleh mencantumkan target aturan. (Meskipun beberapa aturan mengizinkan file dicantumkan secara langsung di Aturan spesifik per bahasa umumnya membatasi target yang tercantum hanya untuk target yang memiliki penyedia tertentu.
Semantik persis terkait artinya target bergantung pada yang lain menggunakan
Biasanya, dependensi |
licenses |
Daftar string jenis lisensi yang akan digunakan untuk target khusus ini. Ini adalah bagian dari API pemberian lisensi yang tidak digunakan lagi dan tidak digunakan lagi oleh Bazel. Jangan gunakan ini. |
srcs |
File yang diproses atau disertakan oleh aturan ini. Umumnya mencantumkan file secara langsung, tetapi dapat mencantumkan target aturan (seperti Aturan khusus bahasa sering kali mengharuskan file yang tercantum memiliki ekstensi file tertentu. |
Atribut yang umum untuk semua aturan build
Bagian ini menjelaskan atribut yang secara implisit ditambahkan ke semua aturan build.
Atribut | Deskripsi |
---|---|
compatible_with |
Daftar lingkungan tempat target ini dapat dibuat, selain lingkungan yang didukung default. Ini adalah bagian dari sistem batasan Bazel, yang memungkinkan pengguna mendeklarasikan target mana yang dapat dan tidak dapat saling bergantung. Misalnya, biner yang dapat di-deploy secara eksternal tidak boleh bergantung pada library dengan kode rahasia perusahaan. Lihat ConstraintSemantics untuk mengetahui detailnya. |
deprecation |
Pesan peringatan yang menjelaskan terkait target ini. Biasanya ini digunakan untuk memberi tahu pengguna bahwa suatu target telah usang, atau telah digantikan oleh aturan lain, bersifat pribadi untuk suatu paket, atau mungkin dianggap berbahaya karena beberapa alasan. Sebaiknya sertakan beberapa referensi (seperti halaman web, nomor bug, atau contoh CL migrasi) sehingga orang dapat dengan mudah mengetahui perubahan apa yang diperlukan untuk menghindari pesan tersebut. Jika ada target baru yang dapat digunakan sebagai pengganti penggantian, sebaiknya migrasikan semua pengguna target lama saja.
Atribut ini tidak berpengaruh pada cara di-build, tetapi
dapat memengaruhi output diagnostik alat build. Alat build akan mengeluarkan
peringatan saat aturan dengan atribut Dependensi intra-paket dikecualikan dari peringatan ini, sehingga, misalnya, pembuatan pengujian aturan yang tidak digunakan lagi tidak akan menimbulkan peringatan. Jika target yang tidak digunakan lagi bergantung pada target lain yang tidak digunakan lagi, tidak ada pesan peringatan yang dikeluarkan. Setelah pengguna berhenti menggunakannya, target dapat dihapus. |
distribs |
Daftar string metode distribusi yang akan digunakan untuk target khusus ini. Ini adalah bagian dari API pemberian lisensi yang tidak digunakan lagi dan tidak digunakan lagi oleh Bazel. Jangan gunakan ini. |
exec_compatible_with |
Daftar
|
exec_properties |
Kamus string yang akan ditambahkan ke Jika kunci ada di properti level target dan platform, nilainya akan diambil dari target. |
features |
Fitur adalah tag string yang dapat diaktifkan atau dinonaktifkan pada target. Makna fitur bergantung pada aturan itu sendiri. Atribut |
restricted_to |
Daftar lingkungan yang dapat menjadi target build target ini, bukan lingkungan yang didukung default.
Ini adalah bagian dari sistem batasan Bazel. Untuk
detailnya, lihat
|
tags |
Tag dapat digunakan di aturan apa pun. Tag pada pengujian dan aturan
Bazel mengubah perilaku kode sandbox-nya jika menemukan kata kunci berikut dalam atribut
Tag pada pengujian umumnya digunakan untuk menganotasi peran pengujian dalam proses debug dan rilis Anda. Biasanya, tag paling berguna untuk pengujian C++ dan Python, yang tidak memiliki kemampuan anotasi runtime. Penggunaan tag dan elemen ukuran memberikan fleksibilitas dalam menyusun rangkaian pengujian berdasarkan kebijakan check-in codebase.
Bazel mengubah perilaku pengujian yang berjalan jika menemukan kata kunci berikut dalam atribut
|
target_compatible_with |
Daftar
Target yang secara transitif bergantung pada target yang tidak kompatibel akan dianggap tidak kompatibel. Pengujian ini juga dilewati untuk pembuatan dan pengujian. Daftar kosong (yang merupakan default) menandakan bahwa target kompatibel dengan semua platform.
Semua aturan selain Aturan Workspace mendukung atribut
ini.
Untuk beberapa aturan, atribut ini tidak memiliki pengaruh. Misalnya, menentukan
Lihat halaman Platform untuk mengetahui informasi selengkapnya tentang lewati target yang tidak kompatibel. |
testonly |
Jika True, hanya target hanya pengujian (seperti pengujian) yang dapat bergantung pada target ini.
Demikian pula, aturan yang bukan
Pengujian (aturan Atribut ini dimaksudkan untuk menunjukkan bahwa target tidak boleh dimuat dalam biner yang dirilis ke produksi. Karena hanya diterapkan pada waktu build, bukan waktu proses, dan menyebar secara viral melalui hierarki dependensi, penerapannya harus dilakukan dengan bijak. Misalnya, stub dan pemalsuan yang berguna untuk pengujian unit mungkin juga berguna untuk pengujian integrasi yang melibatkan biner yang sama yang akan dirilis ke produksi, sehingga mungkin tidak boleh ditandai hanya untuk pengujian. Sebaliknya, aturan yang berbahaya untuk ditautkan, mungkin karena aturan tersebut menggantikan perilaku normal tanpa syarat, seharusnya ditandai sebagai hanya uji coba. |
toolchains |
Kumpulan target yang Membuat variabel yang diizinkan untuk diakses oleh target ini. Target tersebut dapat berupa instance aturan yang menyediakan
Perhatikan bahwa ini berbeda dengan konsep resolusi toolchain yang digunakan oleh implementasi aturan untuk konfigurasi yang bergantung pada platform. Anda tidak dapat menggunakan atribut ini untuk menentukan |
visibility |
Atribut |
Atribut yang sama untuk semua aturan pengujian (*_test)
Bagian ini menjelaskan atribut yang sama untuk semua aturan pengujian.
Atribut | Deskripsi | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
args |
Argumen command line yang diteruskan Bazel ke target saat
dijalankan dengan
Argumen ini diteruskan sebelum nilai |
||||||||||||||||||||
env |
Menentukan variabel lingkungan tambahan yang akan ditetapkan saat pengujian dijalankan oleh
Atribut ini hanya berlaku untuk aturan native, seperti |
||||||||||||||||||||
env_inherit |
Menentukan variabel lingkungan tambahan yang akan diwarisi dari
lingkungan eksternal ketika pengujian dijalankan oleh
Atribut ini hanya berlaku untuk aturan native, seperti |
||||||||||||||||||||
size |
Menentukan "berat" target pengujian: berapa banyak waktu/resource yang perlu dijalankan. Pengujian unit dianggap "kecil", pengujian integrasi "sedang", dan pengujian menyeluruh "besar" atau
"sangat besar". Bazel menggunakan ukuran untuk menentukan waktu tunggu default, yang dapat diganti menggunakan
atribut Ukuran pengujian sesuai dengan waktu tunggu default berikut dan asumsi penggunaan resource lokal puncak:
Variabel lingkungan |
||||||||||||||||||||
timeout |
Berapa lama pengujian diperkirakan akan berjalan sebelum kembali.
Meskipun atribut ukuran pengujian mengontrol estimasi resource, waktu tunggu
pengujian dapat ditetapkan secara independen. Jika tidak ditentukan secara eksplisit, waktu tunggu akan didasarkan pada ukuran pengujian. Waktu tunggu
pengujian dapat diganti dengan flag
Untuk waktu selain yang disebutkan di atas, waktu tunggu pengujian dapat diganti dengan
flag bazel Variabel lingkungan |
||||||||||||||||||||
flaky |
Uji tanda tidak stabil. Jika ditetapkan, pengujian akan dijalankan hingga tiga kali, dan tandai sebagai gagal hanya jika pengujian selalu gagal. Secara default, atribut ini disetel ke Salah (False) dan pengujian hanya dijalankan sekali. Perlu diperhatikan bahwa penggunaan atribut ini umumnya tidak disarankan - pengujian harus dapat lulus dengan andal saat pernyataannya dipertahankan. |
||||||||||||||||||||
shard_count |
Menentukan jumlah shard paralel yang akan digunakan untuk menjalankan pengujian. Nilai ini akan mengganti heuristik apa pun yang digunakan untuk menentukan jumlah
shard paralel yang akan digunakan untuk menjalankan pengujian. Perlu diperhatikan bahwa untuk beberapa aturan pengujian, parameter ini mungkin diperlukan untuk mengaktifkan sharding sejak awal. Lihat juga: Jika sharding pengujian diaktifkan, variabel lingkungan Sharding mengharuskan runner pengujian mendukung protokol sharding pengujian. Jika tidak, maka kemungkinan besar aplikasi akan menjalankan setiap pengujian di setiap shard, yang bukan yang Anda inginkan. Baca bagian Menguji Sharding di Encyclopedia Uji untuk mengetahui detail tentang sharding. |
||||||||||||||||||||
local |
Memaksa pengujian agar dijalankan secara lokal, tanpa sandbox. Menetapkannya ke Benar (True) sama dengan memberikan "lokal" sebagai tag
( |
Atribut yang umum untuk semua aturan biner (*_binary)
Bagian ini menjelaskan atribut yang sama untuk semua aturan biner.
Atribut | Deskripsi |
---|---|
args |
Argumen command line yang akan diteruskan Bazel ke target saat dieksekusi
oleh perintah
CATATAN: Argumen tidak akan diteruskan saat Anda menjalankan target
di luar Bazel (misalnya, dengan mengeksekusi biner secara manual di
|
env |
Menentukan variabel lingkungan tambahan yang akan ditetapkan saat target dijalankan oleh
Atribut ini hanya berlaku untuk aturan native, seperti
CATATAN: Variabel lingkungan tidak ditetapkan saat Anda menjalankan target di luar Bazel (misalnya, dengan menjalankan biner secara manual di |
output_licenses |
Lisensi file output yang dihasilkan biner ini. Ini adalah bagian dari API pemberian lisensi yang tidak digunakan lagi dan tidak digunakan lagi oleh Bazel. Jangan gunakan ini. |
Atribut yang dapat dikonfigurasi
Sebagian besar atribut "dapat dikonfigurasi", yang berarti nilainya dapat berubah jika target dibuat dengan cara yang berbeda. Secara khusus, atribut yang dapat dikonfigurasi dapat bervariasi berdasarkan flag yang diteruskan ke command line Bazel, atau dependensi downstream apa yang meminta target. Ini dapat digunakan, misalnya, untuk menyesuaikan target untuk beberapa platform atau mode kompilasi.
Contoh berikut mendeklarasikan sumber yang berbeda untuk arsitektur target yang berbeda. Menjalankan bazel build :multiplatform_lib --cpu x86
akan membuat target menggunakan x86_impl.cc
, sedangkan mengganti --cpu arm
akan menyebabkannya menggunakan arm_impl.cc
.
cc_library( name = "multiplatform_lib", srcs = select({ ":x86_mode": ["x86_impl.cc"], ":arm_mode": ["arm_impl.cc"] }) ) config_setting( name = "x86_mode", values = { "cpu": "x86" } ) config_setting( name = "arm_mode", values = { "cpu": "arm" } )
Fungsi select()
memilih di antara berbagai nilai alternatif untuk atribut yang dapat dikonfigurasi berdasarkan kriteria config_setting
atau constraint_value
yang sesuai dengan konfigurasi target.
Bazel mengevaluasi atribut yang dapat dikonfigurasi setelah memproses makro dan sebelum
memproses aturan (secara teknis, antara
fase pemuatan dan analisis).
Setiap pemrosesan sebelum evaluasi select()
tidak mengetahui cabang mana yang dipilih select()
. Makro, misalnya, tidak dapat mengubah perilakunya berdasarkan cabang yang dipilih, dan bazel query
hanya dapat membuat tebakan konservatif tentang dependensi target yang dapat dikonfigurasi. Lihat
FAQ ini untuk mengetahui informasi selengkapnya mengenai penggunaan select()
dengan aturan dan makro.
Atribut yang ditandai dengan nonconfigurable
dalam dokumentasinya tidak dapat menggunakan fitur ini. Biasanya atribut tidak dapat dikonfigurasi karena Bazel
secara internal perlu mengetahui nilainya sebelum dapat menentukan cara me-resolve
select()
.
Lihat Atribut Build yang Dapat Dikonfigurasi untuk mengetahui ringkasan mendetail.
Target output implisit
Output implisit dalam C++ tidak digunakan lagi. Jangan menggunakannya dalam bahasa lain jika memungkinkan. Kami belum memiliki jalur penghentian penggunaan, tetapi pada akhirnya juga tidak akan digunakan lagi.
Saat menentukan aturan build dalam file BUILD, Anda secara eksplisit mendeklarasikan
target aturan baru bernama dalam sebuah paket. Banyak fungsi aturan build juga secara implisit memerlukan satu atau beberapa target file output, yang konten dan maknanya berlaku khusus aturan.
Misalnya, saat mendeklarasikan aturan java_binary(name='foo', ...)
secara eksplisit, Anda juga secara implisit mendeklarasikan foo_deploy.jar
target file output sebagai anggota paket yang sama.
(Target khusus ini adalah arsip Java mandiri yang cocok untuk deployment.)
Target output implisit adalah anggota kelas satu dari grafik target global. Sama seperti target lainnya, target dibangun sesuai permintaan, baik saat ditentukan dalam perintah level atas atau saat target tersebut merupakan prasyarat yang diperlukan untuk target build lainnya. Parameter ini dapat direferensikan sebagai dependensi dalam file BUILD, dan dapat diamati dalam output alat analisis seperti bazel query
.
Untuk setiap jenis aturan build, dokumentasi aturan berisi bagian khusus yang menjelaskan nama dan konten output implisit apa pun yang disertakan oleh deklarasi jenis aturan tersebut.
Perbedaan yang penting tetapi agak samar antara
dua namespace yang digunakan oleh sistem build:
label mengidentifikasi target,
yang mungkin berupa aturan atau file, dan target file dapat dibagi menjadi
target file sumber (atau input) dan target file turunan (atau output). Berikut adalah beberapa hal yang dapat Anda sebutkan di file BUILD,
melakukan build dari command line, atau memeriksanya menggunakan bazel query
;
ini adalah namespace target. Setiap target file berkaitan dengan satu file aktual pada disk ("namespace sistem file"); setiap target aturan dapat memiliki nilai nol, atau satu atau beberapa file aktual pada disk.
Mungkin ada file pada disk yang tidak memiliki target yang sesuai; misalnya, file objek .o
yang dihasilkan selama kompilasi C++ tidak dapat direferensikan dari dalam file BUILD atau dari command line.
Dengan cara ini, alat build dapat menyembunyikan detail implementasi tertentu
dalam melakukan tugasnya. Hal ini dijelaskan secara lebih lengkap dalam BANGUN Referensi Konsep.