Definisi umum

Laporkan masalah Lihat sumber Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bagian ini mendefinisikan berbagai istilah dan konsep yang umum untuk banyak fungsi atau aturan build.

Daftar Isi

Tokenisasi Bourne shell

Atribut string tertentu dari beberapa aturan dibagi menjadi beberapa kata sesuai dengan aturan tokenisasi Bourne shell: spasi yang tidak diapit tanda petik membatasi kata-kata terpisah, dan karakter tanda petik tunggal dan ganda serta garis miring terbalik digunakan untuk mencegah tokenisasi.

Atribut yang tunduk pada tokenisasi ini secara eksplisit ditunjukkan sebagai atribut yang tunduk pada tokenisasi dalam definisinya dalam dokumen ini.

Atribut yang tunduk pada ekspansi 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, penggantian ini memungkinkan satu variabel string diperluas menjadi daftar kata opsi khusus konfigurasi.

Perluasan label

Beberapa atribut string dari beberapa aturan tunduk pada perluasan label: jika string tersebut berisi label yang valid sebagai sub-string, seperti //mypkg:target, dan label tersebut adalah prasyarat yang dinyatakan dari aturan saat ini, label tersebut akan diperluas menjadi nama jalur file yang diwakili oleh target //mypkg:target.

Contoh atribut mencakup genrule.cmd dan cc_binary.linkopts. Detailnya dapat sangat bervariasi dalam setiap kasus, terkait masalah seperti: apakah label relatif diperluas; cara menangani label yang diperluas ke beberapa file, dll. Lihat dokumentasi atribut aturan untuk mengetahui detailnya.

Atribut umum yang ditentukan oleh sebagian besar aturan build

Bagian ini menjelaskan atribut yang ditentukan oleh banyak aturan build, tetapi tidak semuanya.

Atribut Deskripsi
data

Daftar label; defaultnya adalah []

File yang diperlukan oleh aturan ini saat runtime. Dapat mencantumkan target file atau aturan. Umumnya memungkinkan semua target.

Output dan file yang dapat dijalankan default target dalam atribut data harus muncul di area *.runfiles dari setiap file yang dapat dieksekusi yang dikeluarkan oleh atau memiliki dependensi runtime pada target ini. Hal ini dapat mencakup file data atau biner yang digunakan saat srcs target ini dijalankan. Lihat bagian dependensi data untuk mengetahui informasi selengkapnya tentang cara mengandalkan dan menggunakan file data.

Aturan baru harus menentukan atribut data jika memproses input yang mungkin menggunakan input lain saat runtime. Fungsi penerapan aturan juga harus mengisi target runfiles dari output dan runfiles atribut data, serta runfiles dari atribut dependensi yang menyediakan kode sumber atau dependensi runtime.

deps

Daftar label; defaultnya adalah []

Dependensi untuk target ini. Umumnya hanya akan mencantumkan target aturan. (Meskipun beberapa aturan mengizinkan file dicantumkan langsung di deps, sebaiknya hindari hal ini jika memungkinkan.)

Aturan khusus bahasa umumnya membatasi target yang tercantum pada target dengan penyedia tertentu.

Semantik yang tepat tentang arti target bergantung pada target lain menggunakan deps khusus untuk jenis aturan, dan dokumentasi khusus aturan menjelaskan lebih detail. Untuk aturan yang memproses kode sumber, deps umumnya menentukan dependensi kode yang digunakan oleh kode dalam srcs.

Sebagian besar, dependensi deps digunakan untuk memungkinkan satu modul menggunakan simbol yang ditentukan dalam modul lain yang ditulis dalam bahasa pemrograman yang sama dan dikompilasi secara terpisah. Dependensi lintas bahasa juga diizinkan dalam banyak kasus: Misalnya, target java_library dapat bergantung pada kode C++ dalam target cc_library, dengan mencantumkan target terakhir dalam atribut deps. Lihat definisi dependensi untuk mengetahui informasi selengkapnya.

licenses

Daftar string; tidak dapat dikonfigurasi; defaultnya adalah ["none"]

Daftar string jenis lisensi yang akan digunakan untuk target tertentu ini. Ini adalah bagian dari API pemberian lisensi yang tidak digunakan lagi dan tidak lagi digunakan oleh Bazel. Jangan gunakan ini.

srcs

Daftar label; defaultnya adalah []

File yang diproses atau disertakan oleh aturan ini. Biasanya mencantumkan file secara langsung, tetapi dapat mencantumkan target aturan (seperti filegroup atau genrule) untuk menyertakan output defaultnya.

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 ditambahkan secara implisit ke semua aturan build.

Atribut Deskripsi
aspect_hints

Daftar label; defaultnya adalah []

Daftar label arbitrer yang diekspos ke aspek (khususnya - aspek yang dipanggil oleh dependensi terbalik aturan ini), tetapi tidak diekspos ke implementasi aturan ini sendiri. Lihat dokumentasi untuk mengetahui detail tentang efek yang akan ditimbulkan oleh petunjuk aspek tertentu untuk set aturan khusus bahasa.

Anda dapat menganggap petunjuk aspek sebagai alternatif yang lebih kaya untuk tag: sementara tag hanya menyampaikan status boolean (tag ada atau tidak ada dalam daftar tags), petunjuk aspek dapat menyampaikan informasi terstruktur arbitrer dalam penyedia-nya.

Dalam praktiknya, petunjuk aspek digunakan untuk interoperabilitas antara set aturan khusus bahasa yang berbeda. Misalnya, bayangkan Anda memiliki target mylang_binary yang perlu bergantung pada target otherlang_library. Logika khusus MyLang memerlukan beberapa informasi tambahan tentang target OtherLang untuk menggunakannya, tetapi otherlang_librarytidak memberikan informasi ini karena tidak mengetahui apa pun tentang MyLang. Salah satu solusinya adalah kumpulan aturan MyLang menentukan aturan mylang_hint yang dapat digunakan untuk mengenkode informasi tambahan tersebut; pengguna dapat menambahkan petunjuk ke aspect_hints otherlang_library, dan mylang_binary dapat menggunakan aspek untuk mengumpulkan informasi tambahan dari penyedia khusus MyLang di mylang_hint.

Untuk contoh konkret, lihat swift_interop_hint dan swift_overlay di rules_swift.

Praktik terbaik:

  • Target yang tercantum dalam aspect_hints harus ringan dan minimal.
  • Logika khusus bahasa hanya boleh mempertimbangkan petunjuk aspek yang memiliki penyedia yang relevan dengan bahasa tersebut, dan harus mengabaikan petunjuk aspek lainnya.
compatible_with

Daftar label; tidak dapat dikonfigurasi; defaultnya adalah []

Daftar lingkungan yang dapat dibangun untuk target ini, selain lingkungan yang didukung secara 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

String; tidak dapat dikonfigurasi; defaultnya adalah None

Pesan peringatan penjelasan yang terkait dengan target ini. Biasanya, hal ini digunakan untuk memberi tahu pengguna bahwa target sudah tidak berlaku, atau telah digantikan oleh aturan lain, bersifat pribadi untuk paket, atau mungkin dianggap berbahaya karena alasan tertentu. Sebaiknya sertakan beberapa referensi (seperti halaman web, nomor bug, atau contoh CL migrasi) agar orang dapat dengan mudah mengetahui perubahan apa yang diperlukan untuk menghindari pesan tersebut. Jika ada target baru yang dapat digunakan sebagai pengganti langsung, sebaiknya migrasikan saja semua pengguna target lama.

Atribut ini tidak memengaruhi cara pembuatan, tetapi dapat memengaruhi output diagnostik alat build. Alat build mengeluarkan peringatan saat aturan dengan atribut deprecation bergantung pada target dalam paket lain.

Dependensi dalam paket dikecualikan dari peringatan ini, sehingga, misalnya, membangun pengujian aturan yang tidak digunakan lagi tidak akan memunculkan peringatan.

Jika target yang tidak digunakan lagi bergantung pada target lain yang tidak digunakan lagi, tidak ada pesan peringatan yang dikeluarkan.

Setelah orang berhenti menggunakannya, target dapat dihapus.

exec_compatible_with

Daftar label; tidak dapat dikonfigurasi; defaultnya adalah []

Daftar constraint_values yang harus ada di platform eksekusi grup exec default target ini. Hal ini merupakan tambahan dari batasan yang sudah ditetapkan oleh jenis aturan. Batasan digunakan untuk membatasi daftar platform eksekusi yang tersedia. Untuk mengetahui detail selengkapnya, lihat deskripsi penyelesaian toolchain. dan grup eksekusi

exec_group_compatible_with

Kamus string ke daftar label; nonconfigurable; default adalah {}

Kamus nama grup exec ke daftar constraint_values yang harus ada di platform eksekusi untuk grup exec tertentu. Hal ini selain batasan yang sudah ditetapkan pada definisi grup exec. Batasan digunakan untuk membatasi daftar platform eksekusi yang tersedia. Untuk mengetahui detail selengkapnya, lihat deskripsi penyelesaian toolchain. dan grup eksekusi

exec_properties

Kamus string; defaultnya adalah {}

Kamus string yang akan ditambahkan ke exec_properties platform yang dipilih untuk target ini. Lihat exec_properties aturan platform.

Jika kunci ada di properti tingkat platform dan target, nilai akan diambil dari target.

Kunci dapat diawali dengan nama grup eksekusi yang diikuti dengan . untuk menerapkannya hanya ke grup eksekusi tertentu tersebut.

features

Daftar string fitur; defaultnya adalah []

Fitur adalah tag string yang dapat diaktifkan atau dinonaktifkan pada target. Arti fitur bergantung pada aturan itu sendiri.

Atribut features ini digabungkan dengan atribut features tingkat paket. Misalnya, jika fitur ["a", "b"] diaktifkan di tingkat paket, dan atribut features target berisi ["-a", "c"], fitur yang diaktifkan untuk aturan adalah "b" dan "c". Lihat contoh.

package_metadata

Daftar label; nonconfigurable; default adalah default_package_metadata

Daftar label yang merupakan metadata terkait target ini. Biasanya, label adalah aturan sederhana yang menampilkan penyedia nilai konstanta. Aturan dan aspek dapat menggunakan label ini untuk melakukan beberapa analisis tambahan pada grafik build.

Kasus penggunaan kanonis adalah rules_license. Untuk kasus penggunaan tersebut, package_metadata dan default_package_metadata digunakan untuk melampirkan informasi tentang lisensi atau versi paket ke target. Aspek yang diterapkan ke biner tingkat teratas dapat digunakan untuk mengumpulkan dan membuat laporan kepatuhan.

restricted_to

Daftar label; tidak dapat dikonfigurasi; defaultnya adalah []

Daftar lingkungan yang dapat dibangun untuk target ini, bukan lingkungan yang didukung secara default.

Ini adalah bagian dari sistem batasan Bazel. Lihat compatible_with untuk mengetahui detailnya.

tags

Daftar string; tidak dapat dikonfigurasi; defaultnya adalah []

Tag dapat digunakan pada aturan apa pun. Tag pada pengujian dan aturan test_suite berguna untuk mengategorikan pengujian. Tag pada target non-pengujian digunakan untuk mengontrol eksekusi sandbox genruledan Starlark tindakan, dan untuk penguraian oleh manusia dan/atau alat eksternal.

Bazel mengubah perilaku kode sandbox-nya jika menemukan kata kunci berikut dalam atribut tags dari target genrule atau pengujian apa pun, atau kunci execution_requirements untuk tindakan Starlark apa pun.

  • Kata kunci no-sandbox menyebabkan tindakan atau pengujian tidak pernah di-sandbox; kata kunci tersebut masih dapat di-cache atau dijalankan dari jarak jauh - gunakan no-cache atau no-remote untuk mencegah salah satu atau keduanya.
  • Hasil kata kunci no-cache dalam tindakan atau pengujian tidak pernah di-cache (secara lokal atau jarak jauh). Catatan: untuk tujuan tag ini, cache disk dianggap sebagai cache lokal, sedangkan cache HTTP dan gRPC dianggap sebagai cache jarak jauh. Cache lainnya, seperti Skyframe atau cache tindakan persisten, tidak terpengaruh.
  • Kata kunci no-remote-cache menyebabkan tindakan atau pengujian tidak pernah di-cache dari jarak jauh (tetapi dapat di-cache secara lokal; juga dapat dieksekusi dari jarak jauh). Catatan: untuk tujuan tag ini, cache disk dianggap sebagai cache lokal, sedangkan cache HTTP dan gRPC dianggap sebagai cache jarak jauh. Cache lainnya, seperti Skyframe atau cache tindakan persisten, tidak terpengaruh. Jika kombinasi cache disk lokal dan cache jarak jauh digunakan (cache gabungan), cache tersebut akan diperlakukan sebagai cache jarak jauh dan dinonaktifkan sepenuhnya kecuali jika --incompatible_remote_results_ignore_disk ditetapkan. Dalam hal ini, komponen lokal akan digunakan.
  • Kata kunci no-remote-exec dalam tindakan atau pengujian tidak pernah dieksekusi dari jarak jauh (tetapi dapat di-cache dari jarak jauh).
  • Kata kunci no-remote mencegah tindakan atau pengujian dieksekusi dari jarak jauh atau di-cache dari jarak jauh. Ini setara dengan menggunakan no-remote-cache dan no-remote-exec.
  • Kata kunci no-remote-cache-upload menonaktifkan bagian upload dari penyimpanan cache jarak jauh pada spawn. tidak menonaktifkan eksekusi jarak jauh.
  • Kata kunci local mencegah tindakan atau pengujian di-cache dari jarak jauh, dieksekusi dari jarak jauh, atau dijalankan di dalam sandbox. Untuk genrules dan pengujian, menandai aturan dengan atribut local = True memiliki efek yang sama.
  • Kata kunci requires-network memungkinkan akses ke jaringan eksternal dari dalam sandbox. Tag ini hanya berpengaruh jika sandbox diaktifkan.
  • Kata kunci block-network memblokir akses ke jaringan eksternal dari dalam sandbox. Dalam hal ini, hanya komunikasi dengan localhost yang diizinkan. Tag ini hanya berpengaruh jika sandbox diaktifkan.
  • requires-fakeroot menjalankan pengujian atau tindakan sebagai uid dan gid 0 (yaitu, pengguna root). Fitur ini hanya didukung di Linux. Tag ini lebih diutamakan daripada opsi command line --sandbox_fake_username.

Tag pada pengujian umumnya digunakan untuk memberi anotasi pada 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 menjalankan pengujian jika menemukan kata kunci berikut di atribut tags aturan pengujian:

  • exclusive akan memaksa pengujian dijalankan dalam mode "eksklusif", sehingga memastikan tidak ada pengujian lain yang berjalan pada waktu yang sama. Pengujian tersebut akan dieksekusi secara berurutan setelah semua aktivitas build dan pengujian non-eksklusif selesai. Eksekusi jarak jauh dinonaktifkan untuk pengujian tersebut karena Bazel tidak memiliki kontrol atas apa yang berjalan di mesin jarak jauh.
  • exclusive-if-local akan memaksa pengujian dijalankan dalam mode "eksklusif" jika dijalankan secara lokal, tetapi akan menjalankan pengujian secara paralel jika dijalankan dari jarak jauh.
  • Kata kunci manual akan mengecualikan target dari perluasan karakter pengganti pola target (..., :*, :all, dll.) dan aturan test_suite yang tidak mencantumkan pengujian secara eksplisit saat menghitung set target tingkat teratas yang akan dibuat/dijalankan untuk perintah build, test, dan coverage. Hal ini tidak memengaruhi perluasan wildcard target atau rangkaian pengujian dalam konteks lain, termasuk perintah query. Perhatikan bahwa manual tidak menyiratkan bahwa target tidak boleh dibuat/dijalankan secara otomatis oleh sistem build/pengujian berkelanjutan. Misalnya, Anda mungkin ingin mengecualikan target dari bazel test ... karena memerlukan tanda Bazel tertentu, tetapi tetap menyertakannya dalam pra-kirim atau pengujian berkelanjutan yang dikonfigurasi dengan benar.
  • Kata kunci external akan memaksa pengujian dijalankan tanpa syarat (terlepas dari nilai --cache_test_results).
Lihat Konvensi Tag di Test Encyclopedia untuk mengetahui konvensi selengkapnya tentang tag yang dilampirkan ke target pengujian.
target_compatible_with

Daftar label; defaultnya adalah []

Daftar constraint_value yang harus ada di platform target agar target ini dianggap kompatibel. Hal ini merupakan tambahan dari batasan yang sudah ditetapkan oleh jenis aturan. Jika platform target tidak memenuhi semua batasan yang tercantum, target dianggap tidak kompatibel. Target yang tidak kompatibel dilewati untuk membangun dan menguji saat pola target diperluas (mis. //..., :all). Jika ditentukan secara eksplisit di command line, target yang tidak kompatibel akan menyebabkan Bazel mencetak error dan menyebabkan kegagalan build atau pengujian.

Target yang bergantung secara transitif pada target yang tidak kompatibel juga dianggap tidak kompatibel. File 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 berpengaruh. Misalnya, menentukan target_compatible_with untuk cc_toolchain tidak berguna.

Lihat halaman Platform untuk mengetahui informasi selengkapnya tentang melewati target yang tidak kompatibel.

testonly

Boolean; tidak dapat dikonfigurasi; defaultnya adalah False kecuali untuk target pengujian dan rangkaian pengujian

Jika True, hanya target testonly (seperti pengujian) yang dapat bergantung pada target ini.

Dengan kata lain, aturan yang bukan testonly tidak diizinkan untuk bergantung pada aturan yang merupakan testonly.

Pengujian (aturan *_test) dan test suite (aturan test_suite) testonly secara default.

Atribut ini dimaksudkan untuk menunjukkan bahwa target tidak boleh terkandung dalam biner yang dirilis ke produksi.

Karena testonly diterapkan pada waktu build, bukan waktu proses, dan menyebar secara viral melalui hierarki dependensi, testonly harus diterapkan dengan bijak. Misalnya, stub dan tiruan yang berguna untuk pengujian unit juga dapat berguna untuk pengujian integrasi yang melibatkan biner yang sama yang akan dirilis ke produksi, dan oleh karena itu, mungkin tidak boleh ditandai sebagai testonly. Sebaliknya, aturan yang bahkan berbahaya untuk ditautkan, mungkin karena aturan tersebut secara tanpa syarat menggantikan perilaku normal, harus ditandai sebagai testonly.

toolchains

Daftar label; tidak dapat dikonfigurasi; defaultnya adalah []

Kumpulan target yang Buat variabelnya diizinkan untuk diakses oleh target ini. Target ini adalah instance aturan yang menyediakan TemplateVariableInfo atau target khusus untuk jenis toolchain yang dibuat ke dalam Bazel. Hal ini mencakup:

  • @bazel_tools//tools/cpp:toolchain_type
  • @rules_java//toolchains:current_java_runtime

Perhatikan bahwa hal ini berbeda dengan konsep penyelesaian toolchain yang digunakan oleh penerapan aturan untuk konfigurasi yang bergantung pada platform. Anda tidak dapat menggunakan atribut ini untuk menentukan cc_toolchain atau java_toolchain tertentu yang akan digunakan target.

visibility

Daftar label; tidak dapat dikonfigurasi; default bervariasi

Atribut visibility mengontrol apakah target dapat diandalkan oleh target di lokasi lain. Lihat dokumentasi untuk visibilitas.

Untuk target yang dideklarasikan langsung dalam file BUILD atau dalam makro lama yang dipanggil dari file BUILD, nilai defaultnya adalah default_visibility paket jika ditentukan, atau ["//visibility:private"]. Untuk target yang dideklarasikan dalam satu atau beberapa makro simbolis, nilai defaultnya selalu ["//visibility:private"] (yang membuatnya hanya dapat digunakan dalam paket yang berisi kode makro).

Atribut yang umum untuk semua aturan pengujian (*_test)

Bagian ini menjelaskan atribut yang umum untuk semua aturan pengujian.

Atribut Deskripsi
args

Daftar string; tunduk pada substitusi $(location) dan "Buat variabel", serta tokenisasi Bourne shell; defaultnya adalah []

Argumen command line yang diteruskan Bazel ke target saat dijalankan dengan bazel test.

Argumen ini diteruskan sebelum nilai --test_arg yang ditentukan di command line bazel test.

env

Kamus string; nilai tunduk pada penggantian $(location) dan "Buat variabel"; defaultnya adalah {}

Menentukan variabel lingkungan tambahan yang akan ditetapkan saat pengujian dijalankan oleh bazel test.

Atribut ini hanya berlaku untuk aturan native, seperti cc_test, py_test, dan sh_test. Hal ini tidak berlaku untuk aturan pengujian yang ditentukan Starlark. Untuk aturan Starlark Anda sendiri, Anda dapat menambahkan atribut "env" dan menggunakannya untuk mengisi Penyedia RunEnvironmentInfo.

TestEnvironment Provider.

env_inherit

Daftar string; defaultnya adalah []

Menentukan variabel lingkungan tambahan yang akan diwarisi dari lingkungan eksternal saat pengujian dijalankan oleh bazel test.

Atribut ini hanya berlaku untuk aturan native, seperti cc_test, py_test, dan sh_test. Hal ini tidak berlaku untuk aturan pengujian yang ditentukan Starlark.

size

String "enormous", "large", "medium", atau "small"; tidak dapat dikonfigurasi; defaultnya adalah "medium"

Menentukan "bobot" target pengujian: berapa banyak waktu/resource yang diperlukan untuk menjalankan pengujian.

Pengujian unit dianggap "kecil", pengujian integrasi "sedang", dan pengujian end-to-end "besar" atau "sangat besar". Bazel menggunakan ukuran untuk menentukan waktu tunggu default, yang dapat diganti menggunakan atribut timeout. Waktu tunggu adalah untuk semua pengujian dalam target BUILD, bukan untuk setiap pengujian individual. Saat pengujian dijalankan secara lokal, size juga digunakan untuk tujuan penjadwalan: Bazel mencoba mematuhi --local_{ram,cpu}_resources dan tidak membebani mesin lokal dengan menjalankan banyak pengujian berat secara bersamaan.

Ukuran pengujian sesuai dengan waktu tunggu default dan penggunaan resource lokal puncak yang diasumsikan sebagai berikut:

Ukuran RAM (dalam MB) CPU (di core CPU) Waktu tunggu default
kecil 20 1 singkat (1 menit)
sedang 100 1 sedang (5 menit)
besar 300 1 panjang (15 menit)
sangat besar 800 1 eternal (60 menit)

Variabel lingkungan TEST_SIZE akan ditetapkan ke nilai atribut ini saat memunculkan pengujian.

timeout

String "short", "moderate", "long", atau "eternal"; tidak dapat dikonfigurasi; default berasal dari atribut size pengujian

Berapa lama pengujian diperkirakan akan berjalan sebelum ditampilkan.

Meskipun atribut ukuran pengujian mengontrol estimasi resource, waktu tunggu pengujian dapat ditetapkan secara terpisah. Jika tidak ditentukan secara eksplisit, waktu tunggu didasarkan pada ukuran pengujian. Waktu tunggu pengujian dapat diganti dengan tanda --test_timeout, misalnya untuk berjalan dalam kondisi tertentu yang diketahui lambat. Nilai waktu tunggu pengujian sesuai dengan jangka waktu berikut:

Nilai Waktu Tunggu Jangka Waktu
short 1 menit
sedang 5 menit
long 15 menit
abadi 60 menit

Untuk waktu selain di atas, waktu tunggu pengujian dapat diganti dengan flag bazel --test_timeout, misalnya untuk menjalankan secara manual dalam kondisi yang diketahui lambat. Nilai --test_timeout dalam detik. Misalnya, --test_timeout=120 akan menyetel waktu tunggu pengujian menjadi dua menit.

Variabel lingkungan TEST_TIMEOUT akan ditetapkan ke waktu tunggu pengujian (dalam detik) saat memunculkan pengujian.

flaky

Boolean; non-dapat dikonfigurasi; defaultnya adalah False

Menandai pengujian sebagai tidak stabil.

Jika ditetapkan, menjalankan pengujian hingga tiga kali, menandainya sebagai gagal hanya jika gagal setiap kali. Secara default, atribut ini ditetapkan ke False dan pengujian dieksekusi hanya satu kali. Perhatikan bahwa penggunaan atribut ini umumnya tidak disarankan - pengujian harus lulus dengan andal saat pernyataannya ditegakkan.

shard_count

Bilangan bulat non-negatif kurang dari atau sama dengan 50; defaultnya adalah -1

Menentukan jumlah shard paralel yang akan digunakan untuk menjalankan pengujian.

Jika disetel, nilai ini akan menggantikan semua heuristik yang digunakan untuk menentukan jumlah shard paralel yang akan digunakan untuk menjalankan pengujian. Perhatikan bahwa untuk beberapa aturan pengujian, parameter ini mungkin diperlukan untuk mengaktifkan sharding sejak awal. Lihat juga: --test_sharding_strategy.

Jika sharding pengujian diaktifkan, variabel lingkungan TEST_TOTAL_SHARDS akan disetel ke nilai ini saat membuat pengujian.

Sharding mengharuskan test runner mendukung protokol sharding pengujian. Jika tidak, kemungkinan besar semua pengujian akan dijalankan di setiap shard, yang bukan yang Anda inginkan.

Lihat Test Sharding di Test Encyclopedia untuk mengetahui detail tentang sharding.

local

Boolean; non-dapat dikonfigurasi; defaultnya adalah False

Memaksa pengujian dijalankan secara lokal, tanpa sandbox.

Menetapkan ini ke True sama dengan memberikan "local" sebagai tag (tags=["local"]).

Atribut umum untuk semua aturan biner (*_binary)

Bagian ini menjelaskan atribut yang umum untuk semua aturan biner.

Atribut Deskripsi
args

Daftar string; tunduk pada penggantian $(location) dan "Buat variabel", dan tokenisasi shell Bourne; tidak dapat dikonfigurasi; defaultnya adalah []

Argumen command line yang akan diteruskan Bazel ke target saat dijalankan baik oleh perintah run atau sebagai pengujian. Argumen ini diteruskan sebelum argumen yang ditentukan di command line bazel run atau bazel test.

CATATAN: Argumen tidak diteruskan saat Anda menjalankan target di luar Bazel (misalnya, dengan menjalankan biner secara manual di bazel-bin/).

env

Kamus string; nilai tunduk pada substitusi $(location) dan "Buat variabel"; defaultnya adalah {}

Menentukan variabel lingkungan tambahan yang akan disetel saat target dieksekusi oleh bazel run.

Atribut ini hanya berlaku untuk aturan native, seperti cc_binary, py_binary, dan sh_binary. Hal ini tidak berlaku untuk aturan yang dapat dieksekusi yang ditentukan Starlark. Untuk aturan Starlark Anda sendiri, Anda dapat menambahkan atribut "env" dan menggunakannya untuk mengisi Penyedia RunEnvironmentInfo.

CATATAN: Variabel lingkungan tidak ditetapkan saat Anda menjalankan target di luar Bazel (misalnya, dengan menjalankan biner secara manual di bazel-bin/).

output_licenses

Daftar string; defaultnya adalah []

Lisensi file output yang dihasilkan oleh biner ini. Ini adalah bagian dari API pemberian lisensi yang tidak digunakan lagi dan tidak lagi digunakan oleh Bazel. Jangan gunakan ini.

Atribut yang dapat dikonfigurasi

Sebagian besar atribut dapat "dikonfigurasi", yang berarti nilainya dapat berubah saat target dibuat dengan cara yang berbeda. Secara khusus, atribut yang dapat dikonfigurasi dapat bervariasi berdasarkan tanda yang diteruskan ke command line Bazel, atau dependensi hilir yang meminta target. Hal ini dapat digunakan, misalnya, untuk menyesuaikan target beberapa platform atau mode kompilasi.

Contoh berikut mendeklarasikan berbagai sumber untuk berbagai arsitektur target. Menjalankan bazel build :multiplatform_lib --cpu x86 akan mem-build target menggunakan x86_impl.cc, sementara mengganti --cpu arm akan menyebabkan target 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 dipenuhi oleh konfigurasi target.

Bazel mengevaluasi atribut yang dapat dikonfigurasi setelah memproses makro dan sebelum memproses aturan (secara teknis, di antara fase pemuatan dan analisis). Pemrosesan apa pun sebelum evaluasi select() tidak mengetahui cabang mana yang dipilih select(). Misalnya, makro tidak dapat mengubah perilakunya berdasarkan cabang yang dipilih, dan bazel query hanya dapat membuat tebakan konservatif tentang dependensi yang dapat dikonfigurasi target. Lihat FAQ ini untuk mengetahui informasi selengkapnya tentang penggunaan select() dengan aturan dan makro.

Atribut yang ditandai nonconfigurable dalam dokumentasinya tidak dapat menggunakan fitur ini. Biasanya, atribut tidak dapat dikonfigurasi karena Bazel secara internal perlu mengetahui nilainya sebelum dapat menentukan cara menyelesaikan select().

Lihat Atribut Build yang Dapat Dikonfigurasi untuk mengetahui ringkasan mendetail.

Target output implisit

Output implisit di C++ tidak digunakan lagi. Sebaiknya jangan menggunakannya dalam bahasa lain jika memungkinkan. Kami belum memiliki jalur penghentian penggunaan tetapi pada akhirnya jalur tersebut juga akan dihentikan penggunaannya.

Saat menentukan aturan build dalam file BUILD, Anda secara eksplisit mendeklarasikan target aturan baru yang diberi nama dalam paket. Banyak fungsi aturan build juga secara implisit memerlukan satu atau beberapa target file output, yang konten dan artinya khusus untuk aturan. Misalnya, saat Anda secara eksplisit mendeklarasikan aturan java_binary(name='foo', ...), Anda juga secara implisit mendeklarasikan target file output foo_deploy.jar sebagai anggota paket yang sama. (Target khusus ini adalah arsip Java mandiri yang cocok untuk deployment.)

Target output implisit adalah anggota kelas utama dari grafik target global. Seperti target lainnya, target ini dibuat sesuai permintaan, baik saat ditentukan dalam perintah build tingkat teratas, atau saat menjadi prasyarat yang diperlukan untuk target build lainnya. File tersebut 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 yang diperlukan oleh deklarasi jenis aturan tersebut.

Perbedaan penting, tetapi agak halus, antara dua namespace yang digunakan oleh sistem build: label mengidentifikasi target, yang dapat berupa aturan atau file, dan target file dapat dibagi menjadi target file sumber (atau input) dan target file turunan (atau output). Berikut adalah hal-hal yang dapat Anda sebutkan dalam file BUILD, build dari command line, atau periksa menggunakan bazel query; ini adalah namespace target. Setiap target file sesuai dengan satu file sebenarnya di disk (yaitu "namespace sistem file"); setiap target aturan dapat sesuai dengan nol, satu, atau beberapa file sebenarnya di disk. Mungkin ada file di disk yang tidak memiliki target yang sesuai; misalnya, file objek .o yang dihasilkan selama kompilasi C++ tidak dapat dirujuk dari dalam file BUILD atau dari command line. Dengan cara ini, alat build dapat menyembunyikan detail penerapan tertentu tentang cara kerjanya. Hal ini dijelaskan lebih lengkap dalam Referensi Konsep BUILD.