Bazel menerima banyak opsi. Beberapa opsi sering kali bervariasi (misalnya, --subcommands), sementara opsi lainnya tetap sama di beberapa build (seperti --package_path). Untuk menghindari penentuan opsi yang tidak berubah ini untuk setiap build (dan perintah lainnya), Anda dapat menentukan opsi dalam file konfigurasi, yang disebut .bazelrc.
Di mana file .bazelrc?
Bazel mencari file konfigurasi opsional di lokasi berikut, dalam urutan yang ditunjukkan di bawah. Opsi ditafsirkan dalam urutan ini, sehingga opsi dalam file yang lebih baru dapat mengganti nilai dari file sebelumnya jika terjadi konflik. Semua opsi yang mengontrol file mana yang dimuat adalah opsi startup, yang berarti opsi tersebut harus muncul setelah bazel dan sebelum perintah (build, test, dll.).
File RC sistem, kecuali jika
--nosystem_rcada.Lokasi:
- Di Linux/macOS/Unix:
/etc/bazel.bazelrc - Di Windows:
%ProgramData%\bazel.bazelrc
Tidak ada error jika file ini tidak ada.
Jika lokasi lain yang ditentukan sistem diperlukan, Anda harus membuat biner Bazel kustom, yang mengganti nilai
BAZEL_SYSTEM_BAZELRC_PATHdi//src/main/cpp:option_processor. Lokasi yang ditentukan sistem dapat berisi referensi variabel lingkungan, seperti${VAR_NAME}di Unix atau%VAR_NAME%di Windows.- Di Linux/macOS/Unix:
File RC ruang kerja, kecuali jika
--noworkspace_rcada.Lokasi:
.bazelrcdi direktori ruang kerja Anda (di samping fileWORKSPACEutama).Tidak ada error jika file ini tidak ada.
File RC beranda, kecuali jika
--nohome_rcada.Lokasi:
- Di Linux/macOS/Unix:
$HOME/.bazelrc - Di Windows:
%USERPROFILE%\.bazelrcjika ada, atau%HOME%/.bazelrc
Tidak ada error jika file ini tidak ada.
- Di Linux/macOS/Unix:
File RC yang ditentukan pengguna, jika ditentukan dengan
--bazelrc=fileFlag ini bersifat opsional, tetapi juga dapat ditentukan beberapa kali.
/dev/nullmenunjukkan bahwa semua--bazelrcberikutnya akan diabaikan, yang berguna untuk menonaktifkan penelusuran file rc pengguna, seperti dalam build rilis.Contoh:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rcx.rcdany.rcdibaca.z.rcdiabaikan karena/dev/nullsebelumnya.
Selain file konfigurasi opsional ini, Bazel mencari file rc global. Untuk mengetahui detail selengkapnya, lihat bagian bazelrc global.
Sintaksis dan semantik .bazelrc
Seperti semua file "rc" UNIX, file .bazelrc adalah file teks dengan tata bahasa berbasis baris. Baris kosong dan baris yang dimulai dengan # (komentar) akan diabaikan. Setiap baris berisi urutan kata, yang di-tokenisasi sesuai dengan aturan yang sama seperti shell Bourne.
Impor
Baris yang dimulai dengan import atau try-import bersifat khusus: gunakan baris ini untuk memuat
file "rc" lainnya. Untuk menentukan jalur yang relatif terhadap root ruang kerja, tulis import %workspace%/path/to/bazelrc.
Perbedaan antara import dan try-import adalah Bazel akan gagal jika file yang di-
import'ed tidak ada (atau tidak dapat dibaca), tetapi tidak demikian untuk file yang di-try-import'ed.
Prioritas impor:
- Opsi dalam file yang diimpor lebih diutamakan daripada opsi yang ditentukan sebelum pernyataan impor.
- Opsi yang ditentukan setelah pernyataan impor lebih diutamakan daripada opsi dalam file yang diimpor.
- Opsi dalam file yang diimpor nanti lebih diutamakan daripada file yang diimpor sebelumnya.
Default opsi
Sebagian besar baris bazelrc menentukan nilai opsi default. Kata pertama di setiap baris menentukan kapan default ini diterapkan:
startup: opsi startup, yang muncul sebelum perintah, dan dijelaskan dalambazel help startup_options.common: opsi yang harus diterapkan ke semua perintah Bazel yang mendukungnya. Jika perintah tidak mendukung opsi yang ditentukan dengan cara ini, opsi tersebut akan diabaikan selama opsi tersebut valid untuk beberapa perintah Bazel lainnya. Perhatikan bahwa hal ini hanya berlaku untuk nama opsi: Jika perintah saat ini menerima opsi dengan nama yang ditentukan, tetapi tidak mendukung nilai yang ditentukan, perintah tersebut akan gagal.always: opsi yang berlaku untuk semua perintah Bazel. Jika perintah tidak mendukung opsi yang ditentukan dengan cara ini, perintah tersebut akan gagal.command: perintah Bazel, sepertibuildatauqueryyang berlaku untuk opsi. Opsi ini juga berlaku untuk semua perintah yang mewarisi dari perintah yang ditentukan. (Misalnya,testmewarisi daribuild.)
Setiap baris ini dapat digunakan lebih dari satu kali dan argumen yang mengikuti kata pertama digabungkan seolah-olah muncul dalam satu baris. (Pengguna CVS, alat lain dengan antarmuka command line "pisau Swiss", akan menemukan sintaksis yang mirip dengan .cvsrc.) Misalnya, baris:
build --test_tmpdir=/tmp/foo --verbose_failuresbuild --test_tmpdir=/tmp/bar
digabungkan sebagai:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/barsehingga flag yang efektif adalah --verbose_failures dan --test_tmpdir=/tmp/bar.
Prioritas opsi:
- Opsi di command line selalu lebih diutamakan daripada opsi di file rc.
Misalnya, jika file rc mengatakan
build -c opt, tetapi flag command line adalah-c dbg, flag command line akan lebih diutamakan. Dalam file rc, prioritas diatur oleh kekhususan: baris untuk perintah yang lebih spesifik lebih diutamakan daripada baris untuk perintah yang kurang spesifik.
Kekhususan ditentukan oleh pewarisan. Beberapa perintah mewarisi opsi dari perintah lain, sehingga perintah yang mewarisi menjadi lebih spesifik daripada perintah dasar. Misalnya
testmewarisi dari perintahbuild, sehingga semua flagbazel buildvalid untukbazel test, dan semua barisbuildjuga berlaku untukbazel testkecuali jika ada baristestuntuk opsi yang sama. Jika file rc mengatakan:test -c dbg --test_env=PATHbuild -c opt --verbose_failuresmaka
bazel build //fooakan menggunakan-c opt --verbose_failures, danbazel test //fooakan menggunakan--verbose_failures -c dbg --test_env=PATH.Grafik pewarisan (kekhususan) adalah:
- Setiap perintah mewarisi dari
common - Perintah berikut mewarisi dari (dan lebih spesifik daripada)
build:test,run,clean,mobile-install,info,print_action,config,cquery, danaquery coveragemewarisi daritest
- Setiap perintah mewarisi dari
Dua baris yang menentukan opsi untuk perintah yang sama dengan kekhususan yang sama diuraikan dalam urutan kemunculannya dalam file.
Karena aturan prioritas ini tidak cocok dengan urutan file, aturan ini membantu keterbacaan jika Anda mengikuti urutan prioritas dalam file rc: mulai dengan opsi
commondi bagian atas, dan akhiri dengan perintah yang paling spesifik di bagian bawah file. Dengan cara ini, urutan pembacaan opsi sama dengan urutan penerapannya, yang lebih intuitif.
Argumen yang ditentukan pada baris file rc dapat mencakup argumen yang bukan opsi, seperti nama target build, dan sebagainya. Argumen ini, seperti opsi yang ditentukan dalam file yang sama, memiliki prioritas yang lebih rendah daripada sibling-nya di command line, dan selalu ditambahkan ke daftar eksplisit argumen non-opsi.
--config
Selain menetapkan default opsi, file rc dapat digunakan untuk mengelompokkan opsi dan menyediakan pintasan untuk pengelompokan umum. Hal ini dilakukan dengan menambahkan akhiran :name ke perintah. Opsi ini diabaikan secara default, tetapi akan di
sertakan jika opsi --config=name ada,
baik di command line maupun dalam file .bazelrc, secara rekursif, bahkan di dalam
definisi konfigurasi lain. Opsi yang ditentukan oleh command:name hanya akan diperluas untuk perintah yang berlaku, dalam urutan prioritas yang dijelaskan di atas.
--config=foo diperluas ke opsi yang ditentukan dalam
file rc "di tempat" sehingga opsi
yang ditentukan untuk konfigurasi memiliki prioritas yang sama dengan opsi --config=foo
yang dimiliki.
Sintaksis ini tidak diperluas ke penggunaan startup untuk menetapkan
opsi startup. Menetapkan startup:config-name --some_startup_option di .bazelrc akan diabaikan.
Contoh
Berikut adalah contoh file ~/.bazelrc:
# Bob's Bazel option defaults
startup --host_jvm_args=-XX:-UseParallelGC
import /home/bobs_project/bazelrc
build --show_timestamps --keep_going --jobs 600
build --color=yes
query --keep_going
# Definition of --config=memcheck
build:memcheck --strip=never --test_timeout=3600
File lain yang mengatur perilaku Bazel
.bazelignore
Anda dapat menentukan direktori dalam ruang kerja yang ingin diabaikan oleh Bazel, seperti project terkait yang menggunakan sistem build lain. Tempatkan file bernama .bazelignore di root ruang kerja dan tambahkan direktori yang ingin diabaikan oleh Bazel, satu per baris. Entri bersifat relatif terhadap root ruang kerja.
File bazelrc global
Bazel membaca file bazelrc opsional dalam urutan ini:
- File rc sistem yang terletak di
etc/bazel.bazelrc. - File rc ruang kerja yang terletak di
$workspace/tools/bazel.rc. - File rc beranda yang terletak di
$HOME/.bazelrc
Setiap file bazelrc yang tercantum di sini memiliki flag yang sesuai yang dapat digunakan untuk menonaktifkannya (misalnya, --nosystem_rc, --noworkspace_rc, --nohome_rc). Anda juga dapat membuat Bazel mengabaikan semua bazelrc dengan meneruskan opsi startup --ignore_all_rc_files.