Definisi umum

Laporkan masalah Lihat sumber

Bagian ini menentukan berbagai istilah dan konsep yang sama 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 shell Bourne: spasi tanpa tanda kutip membatasi kata yang terpisah, serta karakter tanda kutip tunggal dan 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, substitusi ini memungkinkan variabel string tunggal diperluas menjadi daftar kata opsi khusus konfigurasi.

Perluasan label

Beberapa atribut string dari aturan yang sangat sedikit dapat dikenai perluasan label: jika string tersebut berisi label yang valid sebagai substring, seperti //mypkg:target, dan label tersebut merupakan prasyarat yang dinyatakan 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. Baca 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 semua.

Atribut Deskripsi
data

Daftar label; default-nya adalah []

File yang diperlukan oleh aturan ini pada runtime. Dapat mencantumkan target file atau aturan. Umumnya mengizinkan semua target.

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

Aturan baru harus menentukan atribut data jika memproses input yang mungkin menggunakan input lain pada runtime. Fungsi implementasi aturan juga harus mengisi runfile target dari output dan runfile atribut data apa pun, serta runfile dari atribut dependensi apa pun yang menyediakan kode sumber atau dependensi runtime.

deps

Daftar label; default-nya adalah []

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 spesifik per bahasa umumnya membatasi target yang tercantum pada target dengan penyedia tertentu.

Semantik yang tepat terkait artinya bagi target untuk bergantung pada aturan lain yang menggunakan deps bersifat khusus untuk jenis aturan tersebut, dan dokumentasi khusus aturan akan membahas lebih detail. Untuk aturan yang memproses kode sumber, deps umumnya menentukan dependensi kode yang digunakan oleh kode dalam 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 yang terakhir dalam atribut deps. Lihat definisi dependensi untuk mengetahui informasi selengkapnya.

licenses

Daftar string; tidak dapat dikonfigurasi; default-nya adalah ["none"]

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

Daftar label; default-nya adalah []

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

Atribut Deskripsi
compatible_with

Daftar label; tidak dapat dikonfigurasi; default-nya adalah []

Daftar lingkungan yang dapat menjadi target build ini, selain lingkungan yang didukung default.

Ini adalah bagian dari sistem batasan Bazel, yang memungkinkan pengguna mendeklarasikan target 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; default-nya adalah None

Pesan peringatan penjelasan yang terkait dengan target ini. Biasanya, atribut ini digunakan untuk memberi tahu pengguna bahwa target tidak digunakan lagi, 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 pengganti, sebaiknya migrasikan semua pengguna target lama.

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

Dependensi intra-paket dikecualikan dari peringatan ini, sehingga, misalnya, pembuatan pengujian aturan yang tidak digunakan lagi tidak akan menerima peringatan.

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

Setelah pengguna berhenti menggunakannya, target dapat dihapus.

distribs

Daftar string; tidak dapat dikonfigurasi; default-nya adalah []

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 label; tidak dapat dikonfigurasi; default-nya adalah []

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

exec_properties

Kamus string; default-nya 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 target dan platform, nilai akan diambil dari target.

features

Daftar string feature; default-nya adalah []

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

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

restricted_to

Daftar label; tidak dapat dikonfigurasi; default-nya adalah []

Daftar lingkungan yang dapat menjadi target build untuk target ini, bukan lingkungan yang didukung default.

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

tags

Daftar string; tidak dapat dikonfigurasi; default-nya adalah []

Tag dapat digunakan di aturan apa 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 mengubah perilaku kode sandbox-nya jika menemukan kata kunci berikut dalam atribut tags dari target pengujian atau genrule, atau kunci execution_requirements untuk tindakan Starlark apa pun.

  • Kata kunci no-sandbox menghasilkan tindakan atau pengujian tidak pernah di-sandbox. Kata kunci masih dapat disimpan di cache atau dijalankan dari jarak jauh - gunakan no-cache atau no-remote untuk mencegah salah satu atau keduanya.
  • Kata kunci no-cache menghasilkan tindakan atau pengujian tidak pernah disimpan dalam cache (secara lokal atau jarak jauh). Catatan: untuk tujuan tag ini, cache disk dianggap sebagai cache lokal, sedangkan cache HTTP dan gRPC dianggap jarak jauh. Cache lain, seperti Skyframe atau cache tindakan persisten, tidak terpengaruh.
  • Kata kunci no-remote-cache menghasilkan 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 jarak jauh. Cache lain, seperti Skyframe atau cache tindakan persisten, tidak terpengaruh. Jika kombinasi cache disk lokal dan cache jarak jauh digunakan (cache gabungan), cache tersebut diperlakukan sebagai cache jarak jauh dan dinonaktifkan sepenuhnya kecuali jika --incompatible_remote_results_ignore_disk ditetapkan, yang dalam hal ini komponen lokal akan digunakan.
  • Kata kunci no-remote-exec menyebabkan tindakan atau pengujian tidak pernah dijalankan dari jarak jauh (tetapi mungkin disimpan dalam cache dari jarak jauh).
  • Kata kunci no-remote mencegah tindakan atau pengujian dijalankan dari jarak jauh atau di-cache dari jarak jauh. Ini sama dengan menggunakan no-remote-cache dan no-remote-exec.
  • Kata kunci no-remote-cache-upload menonaktifkan upload bagian dari penyimpanan cache jarak jauh dari sebuah spawn. itu tidak menonaktifkan eksekusi jarak jauh.
  • Kata kunci local mencegah tindakan atau pengujian disimpan dalam cache jarak jauh, dijalankan 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). Opsi ini hanya didukung di Linux. Tag ini lebih diprioritaskan daripada opsi command line --sandbox_fake_username.

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 elemen ukuran dan tag memberikan fleksibilitas dalam menyusun rangkaian pengujian berdasarkan kebijakan check-in codebase.

Bazel mengubah perilaku pengujian yang berjalan jika menemukan kata kunci berikut dalam atribut tags aturan pengujian:

  • exclusive akan memaksa pengujian agar dijalankan dalam mode "eksklusif", yang memastikan tidak ada pengujian lain yang berjalan pada saat yang sama. Pengujian tersebut akan dijalankan secara serial 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 untuk 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 kumpulan target level teratas yang akan di-build/dijalankan untuk perintah build, test, dan coverage. Perubahan ini tidak memengaruhi karakter pengganti target atau perluasan paket pengujian dalam konteks lain, termasuk perintah query. Perhatikan bahwa manual tidak berarti bahwa target tidak boleh dibangun/dijalankan secara otomatis oleh sistem build/pengujian berkelanjutan. Misalnya, Anda mungkin ingin mengecualikan target dari bazel test ... karena memerlukan flag Bazel spesifik, tetapi tetap menyertakannya dalam pra-pengiriman yang dikonfigurasi dengan benar atau pengujian berkelanjutan.
  • Kata kunci external akan memaksa pengujian untuk dijalankan tanpa syarat (terlepas dari nilai --cache_test_results).
Baca Konvensi Tag di Ensiklopedia Pengujian untuk mengetahui konvensi lainnya tentang tag yang dilampirkan ke target pengujian.
target_compatible_with

Daftar label; default-nya adalah []

Daftar constraint_value yang harus ada dalam 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 incompatible. Target yang tidak kompatibel akan dilewati untuk proses build dan pengujian saat pola target diperluas (misalnya //..., :all). Jika ditentukan 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. Instance tersebut 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 target_compatible_with untuk cc_toolchain tidak berguna.

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

testonly

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

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

Setara dengannya, aturan yang bukan testonly tidak diizinkan bergantung pada aturan apa pun yaitu testonly.

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

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

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

toolchains

Daftar label; tidak dapat dikonfigurasi; default-nya adalah []

Kumpulan target yang Buat variabel-nya dapat diakses oleh target ini. Target ini adalah instance aturan yang menyediakan TemplateVariableInfo atau target khusus untuk jenis toolchain yang di-build di dalam Bazel. Hal 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 spesifik mana yang akan digunakan target.

visibility

Daftar label; tidak dapat dikonfigurasi; default-nya adalah default_visibility dari paket jika ditentukan, atau "//visibility:private" jika tidak

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

Atribut yang umum untuk semua aturan pengujian (*_test)

Bagian ini menjelaskan atribut yang bersifat umum bagi semua aturan pengujian.

Atribut Deskripsi
args

Daftar string; tunduk pada penggantian $(location) dan "Make 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 apa pun yang ditentukan pada command line bazel test.

env

Kamus string; nilai dapat tunduk pada substitusi $(location) dan "Make 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. Tidak berlaku untuk aturan pengujian yang ditentukan Starlark. Untuk aturan Starlark sendiri, Anda dapat menambahkan atribut "env" dan menggunakannya untuk mengisi Penyedia TestEnvironment.

env_inherit

Daftar string; default-nya 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. Tidak berlaku untuk aturan pengujian yang ditentukan Starlark.

size

String "enormous", "large", "medium", atau "small"; tidak dapat dikonfigurasi; default-nya adalah "medium"

Menentukan "berat" target pengujian: berapa banyak waktu/resource yang diperlukan untuk 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 timeout. Waktu tunggu berlaku untuk semua pengujian di target BUILD, bukan untuk setiap pengujian. Saat pengujian dijalankan secara lokal, size juga digunakan untuk tujuan penjadwalan: Bazel mencoba menerapkan --local_{ram,cpu}_resources dan tidak membebani komputer lokal dengan menjalankan banyak pengujian berat secara bersamaan.

Ukuran pengujian sesuai dengan waktu tunggu default berikut dan asumsi penggunaan resource lokal puncak:

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

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

timeout

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

Berapa lama pengujian diperkirakan akan berjalan sebelum kembali.

Meskipun atribut ukuran pengujian mengontrol estimasi resource, waktu tunggu pengujian dapat ditetapkan secara terpisah. 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
short 1 menit
longgar 5 menit
long 15 menit
abadi 60 menit

Untuk waktu selain yang disebutkan 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 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; tidak dapat dikonfigurasi; default-nya adalah False

Tanda pengujian sebagai tidak stabil.

Jika ditetapkan, jalankan pengujian hingga tiga kali, yang menandainya sebagai gagal hanya jika gagal setiap kali dijalankan. Secara default, atribut ini disetel ke Salah (False) dan pengujian hanya dijalankan satu kali. Perlu diperhatikan bahwa penggunaan atribut ini umumnya tidak disarankan - pengujian harus dapat lulus tanpa masalah saat pernyataannya dipertahankan.

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 ditetapkan, nilai ini akan menggantikan heuristik 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: --test_sharding_strategy.

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

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

Lihat Sharding Pengujian di Ensiklopedia Pengujian untuk mengetahui detail tentang sharding.

local

Boolean; tidak dapat dikonfigurasi; default-nya adalah False

Memaksa pengujian untuk dijalankan secara lokal, tanpa sandbox.

Menetapkannya ke Benar sama dengan memberikan "lokal" sebagai tag (tags=["local"]).

Atribut yang umum untuk semua aturan biner (*_binary)

Bagian ini menjelaskan atribut yang sama untuk semua aturan biner.

Atribut Deskripsi
args

Daftar string; tunduk pada penggantian $(location) dan "Make variabel", serta tokenisasi Bourne shell; tidak dapat dikonfigurasi; default-nya adalah []

Argumen command line yang akan diteruskan Bazel ke target saat dieksekusi 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

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

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. Ini tidak berlaku untuk aturan yang dapat dieksekusi yang ditentukan oleh Starlark.

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; default-nya adalah []

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", artinya 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 berbagai 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 mana yang memenuhi kriteria konfigurasi target.

Bazel mengevaluasi atribut yang dapat dikonfigurasi setelah memproses makro dan sebelum memproses aturan (secara teknis, di 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 perkiraan konservatif terkait dependensi yang dapat dikonfigurasi milik target. Baca FAQ ini untuk mengetahui informasi selengkapnya mengenai penggunaan select() dengan aturan dan makro.

Atribut yang ditandai sebagai nonconfigurable dalam dokumentasinya tidak dapat menggunakan fitur ini. Biasanya suatu 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 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 jalur tersebut juga tidak akan digunakan lagi.

Saat menentukan aturan build di file BUILD, Anda secara eksplisit mendeklarasikan target aturan bernama baru dalam sebuah paket. Banyak fungsi aturan build juga secara implisit memerlukan satu atau beberapa target file output, yang konten dan artinya khusus aturan. Misalnya, saat Anda secara eksplisit mendeklarasikan aturan java_binary(name='foo', ...), 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, unit ini di-build sesuai permintaan, baik saat ditentukan dalam perintah build level teratas, maupun saat menjadi prasyarat yang diperlukan untuk target build lainnya. Parameter ini dapat dirujuk sebagai dependensi dalam file BUILD, dan dapat diamati dalam output alat analisis seperti bazel query.

Untuk setiap jenis aturan build, dokumentasi aturan tersebut berisi bagian khusus yang menjelaskan nama dan konten output implisit apa pun yang diperlukan oleh deklarasi aturan semacam itu.

Perbedaan yang penting tetapi kurang jelas antara kedua 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 dalam file BUILD, mem-build dari command line, atau memeriksanya menggunakan bazel query; ini adalah namespace target. Setiap target file sesuai dengan satu file aktual di disk ("namespace sistem file"); setiap target aturan dapat memiliki keterkaitan 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 dalam cara melakukan tugasnya. Hal ini dijelaskan lebih lengkap dalam Referensi Konsep BANGUN.