BazelCon 2022 akan hadir pada 16-17 November ke New York dan online.
Daftar sekarang.

Definisi umum

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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

Daftar

Tokenisasi shell Bourne

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

Atribut yang tunduk pada tokenisasi ini secara eksplisit ditunjukkan seperti itu dalam definisinya di 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 dengan substitusi ini, variabel string tunggal dapat diperluas menjadi daftar khusus kata-kata opsi konfigurasi.

Perluasan label

Beberapa atribut string dari sangat sedikit aturan dapat dikenakan perluasan label: jika string tersebut berisi label yang valid sebagai substring, seperti //mypkg:target, dan label tersebut adalah prasyarat yang dinyatakan dari saat ini, aturan ini diperluas menjadi nama jalur file yang direpresentasikan oleh //mypkg:target target.

Atribut contoh mencakup genrule.cmd dan cc_binary.linkopts. Detailnya dapat bervariasi secara signifikan dalam setiap kasus, karena masalah seperti: apakah label relatif diluaskan; cara penanganan label yang diperluas ke beberapa file, dll. Lihat dokumentasi atribut aturan untuk mengetahui hal-hal spesifik.

Atribut standar yang ditentukan oleh sebagian besar aturan build

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

Atribut Deskripsi
data

List of labels ; optional

File yang dibutuhkan oleh aturan ini pada waktu proses. Dapat mencantumkan target file atau aturan. Umumnya memungkinkan target apa pun.

Output default dan runfile target dalam atribut data harus muncul di area *.runfiles dari setiap executable yang merupakan output oleh atau memiliki dependensi runtime pada target ini. Ini dapat mencakup file 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 pada waktu proses. Fungsi penerapan aturan juga harus mengisi runfile target dari output dan runfile atribut data, serta runfile dari atribut dependensi yang menyediakan kode sumber atau dependensi runtime.

deps

List of labels ; optional

Dependensi untuk target ini. Umumnya hanya boleh mencantumkan target aturan. (Meskipun beberapa aturan mengizinkan file dicantumkan langsung di deps, hal ini harus dihindari jika memungkinkan.)

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

Semantik tepat dari apa yang dimaksud dengan target yang bergantung pada target lainnya menggunakan deps spesifik untuk jenis aturan, dan dokumentasi khusus aturan menjelaskan lebih mendetail. Untuk aturan yang memproses kode sumber, deps umumnya menentukan dependensi kode yang digunakan oleh kode di srcs.

Biasanya, 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 mungkin bergantung pada kode C++ dalam target cc_library, dengan mencantumkan listingan terakhir dalam deps. Lihat definisi dependensi untuk informasi selengkapnya.

licenses

List of strings; optional; nonconfigurable

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

srcs

List of labels ; optional

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

Aturan khusus bahasa sering kali mengharuskan file yang tercantum memiliki ekstensi file tertentu.

Atribut yang sama untuk semua aturan build

Bagian ini menjelaskan atribut yang ditambahkan secara implisit ke semua aturan build.

Atribut Deskripsi
compatible_with

List of labels ; optional; nonconfigurable

Daftar lingkungan yang dapat di-build target ini, 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

String; optional; nonconfigurable

Pesan peringatan penjelasan yang terkait dengan target ini. Umumnya, ini digunakan untuk memberi tahu pengguna bahwa target tidak berlaku lagi, 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) sehingga Anda dapat dengan mudah mengetahui perubahan yang diperlukan untuk menghindari pesan. Jika ada target baru yang dapat digunakan sebagai pengganti pengganti, sebaiknya migrasikan semua pengguna target lama.

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

Dependensi intra-paket dikecualikan dari peringatan ini, sehingga, misalnya, mem-build pengujian aturan yang tidak digunakan lagi tidak akan mendapatkan peringatan.

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

Setelah orang berhenti menggunakannya, target dapat dihapus.

distribs

List of strings; optional; nonconfigurable

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

exec_compatible_with

List of labels ; optional; nonconfigurable

Daftar constraint_values yang harus ada di platform eksekusi untuk target ini. Ini adalah tambahan untuk batasan apa pun yang telah ditetapkan oleh jenis aturan. Batasan digunakan untuk membatasi daftar platform eksekusi yang tersedia. Untuk detail selengkapnya, lihat deskripsi resolusi toolchain.

exec_properties

Dictionary of strings; optional

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

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

features

List of feature strings; optional

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

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

restricted_to

List of labels ; optional; nonconfigurable

Daftar lingkungan yang dapat di-build target ini, bukan lingkungan yang didukung default.

Ini adalah bagian dari sistem batasan Bazel. Untuk detailnya, lihat compatible_with.

tags

List of strings; optional; nonconfigurable

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

Bazel memodifikasi perilaku kode sandbox jika menemukan kata kunci berikut ditags dari pengujian apa pun ataugenrule target, atau kunciexecution_requirements untuk setiap tindakan Starlark.

  • Kata kunci no-sandbox menyebabkan tindakan atau pengujian tidak pernah di-sandbox; masih dapat di-cache atau dijalankan dari jarak jauh - gunakan no-cache atau no-remote untuk mencegah salah satu atau keduanya.
  • Kata kunci no-cache menyebabkan tindakan atau pengujian tidak pernah di-cache (jarak jauh atau lokal)
  • Kata kunci no-remote-cache menyebabkan tindakan atau pengujian tidak pernah di-cache dari jarak jauh (tetapi mungkin di-cache secara lokal; mungkin juga dijalankan dari jarak jauh). Catatan: untuk tujuan tag ini, cache disk dianggap sebagai cache lokal, sedangkan cache http dan gRPC dianggap sebagai remote. Jika cache gabungan ditentukan (yaitu, cache dengan komponen lokal dan jarak jauh), cache ini diperlakukan sebagai cache jarak jauh dan dinonaktifkan sepenuhnya, kecuali jika --incompatible_remote_results_ignore_disk ditetapkan dan komponen lokal akan digunakan.
  • Kata kunci no-remote-exec menyebabkan tindakan atau pengujian tidak pernah dijalankan dari jarak jauh (tetapi mungkin di-cache dari jarak jauh).
  • Kata kunci no-remote mencegah tindakan atau pengujian dieksekusi dari jarak jauh atau di-cache dari jarak jauh. Ini sama dengan menggunakan no-remote-cache dan no-remote-exec.
  • Kata kunci local mencegah tindakan atau pengujian disimpan dalam cache dari jarak jauh, dieksekusi dari jarak jauh, atau dijalankan di dalam sandbox. Untuk genrule 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). Ini hanya didukung di Linux. Tag ini lebih diutamakan daripada opsi command line --sandbox_fake_username.

Tag pada pengujian umumnya digunakan untuk menganotasi peran pengujian dalam proses debug dan rilis. Biasanya, tag sangat berguna untuk pengujian C++ dan Python, yang tidak memiliki kemampuan anotasi runtime. Penggunaan tag dan elemen ukuran memberikan fleksibilitas dalam merakit rangkaian pengujian berdasarkan kebijakan check-in codebase.

Bazel memodifikasi perilaku pengujian jika menemukan kata kunci berikut dalam atribut tags dari aturan pengujian:

  • exclusive akan memaksa pengujian dijalankan dalam mode "eksklusif", sehingga tidak ada pengujian lain yang dijalankan pada saat yang bersamaan. Pengujian tersebut akan dijalankan secara serial setelah semua aktivitas build dan pengujian non-eksklusif telah selesai. Eksekusi jarak jauh dinonaktifkan untuk pengujian tersebut karena Bazel tidak memiliki kendali atas apa yang berjalan di mesin 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 kumpulan target level teratas untuk mem-build/menjalankan perintah build, test, dan coverage. Perubahan ini tidak memengaruhi perluasan karakter pengganti atau rangkaian pengujian target dalam konteks lain, termasuk perintah query. Perhatikan bahwa manual tidak menyiratkan bahwa target tidak boleh di-build/dijalankan secara otomatis oleh sistem build/pengujian berkelanjutan. Misalnya, Anda mungkin ingin mengecualikan target dari bazel test ... karena memerlukan flag Bazel tertentu, tetapi tetap menyertakannya dalam pra-pengiriman 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 konvensi selengkapnya tentang tag yang dilampirkan ke target pengujian.
target_compatible_with

List of labels ; optional

Daftar constraint_value yang harus ada di platform target agar target ini dianggap kompatibel. Ini adalah tambahan untuk batasan yang telah ditetapkan oleh jenis aturan. Jika platform target tidak memenuhi semua batasan yang tercantum, target akan dianggap tidak kompatibel. Target yang tidak kompatibel dilewati untuk membuat dan menguji saat pola target diperluas (misalnya //..., :all). Jika ditetapkan secara eksplisit pada command line, target yang tidak kompatibel akan menyebabkan Bazel mencetak error dan menyebabkan kegagalan build atau pengujian.

Target yang secara transitif bergantung pada target yang tidak kompatibel dianggap tidak kompatibel. Fitur tersebut juga dilewati untuk pembuatan dan pengujian.

Daftar kosong (yang merupakan default) menandakan bahwa target tersebut 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 cara melewati target yang tidak kompatibel.

testonly

Boolean; optional; default False except for test and test suite targets; nonconfigurable

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

Setara dengan aturan yang bukan testonly tidak diizinkan untuk bergantung pada aturan apa pun yang berupa testonly.

Pengujian (aturan *_test) dan rangkaian pengujian (aturan test_suite) secara default adalah testonly.

Atribut ini dimaksudkan bahwa target tidak boleh berada dalam biner yang dirilis ke produksi.

Karena diterapkan pada waktu build, bukan waktu proses, dan disebarkan ke seluruh hierarki dependensi, pengujian hanya boleh diterapkan dengan bijak. Misalnya, stub dan palsu 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 seharusnya tidak ditandai hanya pengujian data. Sebaliknya, aturan yang berbahaya untuk ditautkan, mungkin karena aturan tersebut tanpa syarat menggantikan perilaku normal, seharusnya ditandai sebagai hanya pengujian.

toolchains

List of labels ; optional; nonconfigurable

Kumpulan target yang variabelnya Buat variabel ini diizinkan untuk diakses target ini. Target ini adalah instance dari aturan yang menyediakan TemplateVariableInfo atau target khusus untuk jenis toolchain yang disertakan dalam Bazel. Opsi ini mencakup:

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

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 cc_toolchain atau java_toolchain target mana yang akan digunakan.

visibility

List of labels ; optional; default default_visibility from package if specified, or //visibility:private otherwise; nonconfigurable

Atribut visibility pada target mengontrol apakah target dapat digunakan dalam paket lain. Lihat dokumentasi untuk visibilitas.

Atribut umum untuk semua aturan pengujian (*_test)

Bagian ini menjelaskan atribut yang umum untuk semua aturan pengujian.

Atribut Deskripsi
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization

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

Argumen ini diteruskan sebelum nilai --test_arg apa pun yang ditentukan pada command line bazel test.

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

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. Setelan ini tidak berlaku untuk aturan pengujian yang ditetapkan oleh Starlark. Atribut ini hanya berlaku untuk aturan native, seperti cc_test, py_test, dan sh_test. Aturan ini tidak berlaku untuk aturan pengujian yang ditentukan oleh Starlark. Untuk aturan Starlark Anda sendiri, Anda dapat menambahkan atribut "env" dan menggunakannya untuk mengisi Penyedia TestEnvironment.

env_inherit

List of strings; optional

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. Setelan ini tidak berlaku untuk aturan pengujian yang ditetapkan oleh Starlark.

size

String "enormous", "large" "medium" or "small", default is "medium"; optional; nonconfigurable

Menentukan "berat" pengujian: berapa lama waktu/resource yang diperlukan untuk menjalankannya.

Pengujian unit dianggap "kecil", pengujian integrasi "sedang", dan pengujian menyeluruh "besar" atau "besar". Bazel menggunakan ukuran untuk menentukan waktu tunggu default, yang dapat diganti menggunakan atribut timeout. 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 uji coba sesuai dengan waktu tunggu default berikut dan asumsi penggunaan resource lokal puncak:

Ukuran RAM (dalam MB) CPU (di inti CPU) Waktu tunggu default
small 20 1 singkat (1 menit)
medium 100 1 sedang (5 menit)
large 300 1 lama (15 menit)
sangat besar 800 1 abadi (60 menit)

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

timeout

String "short", "moderate", "long", "eternal" (with the default derived from the test's size attribute); nonconfigurable

Berapa lama pengujian diharapkan 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 --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
video singkat 1 menit
longgar 5 menit
long 15 menit
abadi 60 menit

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

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

flaky

Boolean; optional; default False; nonconfigurable

Tandai pengujian sebagai tidak stabil.

Jika ditetapkan, jalankan pengujian hingga tiga kali, yang menandainya sebagai gagal hanya jika gagal. Secara default, atribut ini ditetapkan ke Salah dan pengujian hanya dijalankan sekali. Perlu diperhatikan bahwa penggunaan atribut ini tidak disarankan. Pengujian harus lulus dengan andal saat pernyataan mereka didukung.

shard_count

Non-negative integer less than or equal to 50; optional

Menentukan jumlah shard paralel yang akan digunakan untuk menjalankan pengujian.

Nilai ini akan menggantikan heuristik apa pun yang digunakan untuk menentukan jumlah shard paralel yang digunakan untuk menjalankan pengujian. Perlu diketahui bahwa untuk beberapa aturan pengujian, parameter ini mungkin diperlukan untuk mengaktifkan sharding. Lihat juga --test_sharding_strategy.

Jika sharding pengujian diaktifkan, variabel lingkungan TEST_TOTAL_SHARDS akan ditetapkan ke nilai ini saat menghasilkan pengujian.

Sharding memerlukan runner pengujian untuk mendukung protokol sharding pengujian. Jika tidak, maka kemungkinan besar aplikasi akan berjalan di setiap pengujian dalam setiap shard, yang bukan yang Anda inginkan.

Lihat Menguji Sharding di Test Encyclopedia untuk mengetahui detail sharding.

local

Boolean; default False; nonconfigurable

Memaksa pengujian untuk dijalankan secara lokal, tanpa sandbox.

Menyetelnya ke Benar (True) setara 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

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization; nonconfigurable

Argumen command line yang akan diteruskan oleh Bazel ke target saat dijalankan oleh perintah run atau sebagai pengujian. Argumen ini diteruskan sebelum argumen yang ditentukan pada 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

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

Menentukan variabel lingkungan tambahan yang akan ditetapkan saat target dijalankan oleh bazel run.

Atribut ini hanya berlaku untuk aturan native, seperti cc_binary, py_binary, dan sh_binary. Hal ini tidak berlaku untuk aturan executable Starlark yang ditentukan.

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

output_licenses

List of strings; optional

Lisensi file output yang dihasilkan biner ini. Ini adalah bagian dari API pemberian lisensi yang tidak digunakan lagi yang tidak lagi digunakan 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 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 nilai alternatif yang berbeda untuk atribut yang dapat dikonfigurasi berdasarkan config_setting atau constraint_value kriteria yang terpenuhi oleh konfigurasi target.

Bazel mengevaluasi atribut yang dapat dikonfigurasi setelah memproses makro dan sebelum memproses aturan (secara teknis, antara fase pemuatan dan analisis). Pemrosesan apa pun sebelum evaluasi select() tidak mengetahui cabang mana yang dipilih oleh 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 mempelajari lebih lanjut cara menggunakan 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 ringkasan mendetail.

Target output implisit

Output implisit di C++ tidak digunakan lagi. Sebaiknya Anda tidak menggunakannya dalam bahasa lain jika memungkinkan. Kita belum memiliki jalur penghentian penggunaan, tetapi pada akhirnya keduanya tidak akan digunakan lagi.

Saat menentukan aturan build dalam file BUILD, Anda secara eksplisit mendeklarasikan target aturan baru yang bernama dalam sebuah paket. Banyak fungsi aturan build yang secara implisit juga mencakup satu atau beberapa target file output, yang konten dan artinya mencakup aturan tertentu. Misalnya, saat mendeklarasikan aturan java_binary(name='foo', ...) secara eksplisit, Anda juga secara secara implisit mendeklarasikan target file output foo_deploy.jar sebagai anggota paket yang sama data. (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 tersebut dibuat sesuai permintaan, baik saat ditentukan dalam perintah build level teratas, atau saat menjadi prasyarat yang diperlukan untuk target build lainnya. Library 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 diperlukan oleh deklarasi jenis aturan tersebut.

Perbedaan 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 hal-hal yang dapat Anda sebutkan di 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 ("namespace sistem file"); setiap target aturan dapat berkaitan dengan nol, satu, atau beberapa file sebenarnya di 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 tentang cara kerjanya. Hal ini dijelaskan lebih lengkap di Referensi Konsep BUILD.