Bazel menerima banyak opsi. Beberapa opsi sering kali bervariasi (misalnya,
--subcommands
) sementara versi lainnya tetap sama di beberapa build (seperti
--package_path
). Agar tidak menetapkan 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
tersebut?
Bazel mencari file konfigurasi
opsional di lokasi berikut,
dalam urutan yang ditunjukkan di bawah ini. Opsi ditafsirkan dalam urutan ini, jadi
pilihan di file berikutnya dapat menggantikan
nilai dari file sebelumnya jika
konflik akan muncul. Semua opsi yang mengontrol
file mana yang dimuat
opsi startup, yang berarti keduanya harus terjadi setelah bazel
dan
sebelum perintah (build
, test
, dll.).
File RC sistem, kecuali jika
--nosystem_rc
ada.Lokasi:
- Di Linux/macOS/Unix:
/etc/bazel.bazelrc
- Pada Windows:
%ProgramData%\bazel.bazelrc
Bukan suatu error jika file ini tidak ada.
Jika lokasi lain yang ditentukan sistem diperlukan, Anda harus membuat Biner bazel, mengganti nilai
BAZEL_SYSTEM_BAZELRC_PATH
di//src/main/cpp:option_processor
. Lokasi yang ditentukan sistem mungkin berisi referensi variabel lingkungan, seperti${VAR_NAME}
pada Unix atau%VAR_NAME%
pada Windows.- Di Linux/macOS/Unix:
File RC Workspace, kecuali jika
--noworkspace_rc
ada.Jalur:
.bazelrc
di direktori ruang kerja Anda (di samping ruang utamaWORKSPACE
).Bukan suatu error jika file ini tidak ada.
File RC home, kecuali jika
--nohome_rc
ada.Lokasi:
- Di Linux/macOS/Unix:
$HOME/.bazelrc
- Di Windows:
%USERPROFILE%\.bazelrc
jika ada, atau%HOME%/.bazelrc
Bukan suatu error jika file ini tidak ada.
- Di Linux/macOS/Unix:
File RC yang ditentukan pengguna, jika ditentukan dengan
--bazelrc=file
Tanda ini bersifat opsional tetapi juga dapat ditentukan beberapa kali.
/dev/null
menunjukkan bahwa semua--bazelrc
selanjutnya akan diabaikan, yang berguna untuk menonaktifkan penelusuran file rc pengguna, seperti di build rilis.Contoh:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
x.rc
dany.rc
sudah dibaca.z.rc
diabaikan karena/dev/null
sebelumnya.
Selain file konfigurasi opsional ini, Bazel mencari rc global . Untuk detail selengkapnya, lihat bagian bazelrc global.
Sintaksis dan semantik .bazelrc
Seperti semua "rc" UNIX sebagai dasar, file .bazelrc
akan berupa file teks dengan
tata bahasa. Baris kosong yang dimulai dengan #
(komentar) akan diabaikan. Masing-masing
berisi urutan kata, yang ditokenkan sesuai dengan
aturan seperti {i>shell Bourne<i}.
Impor
Baris yang diawali dengan import
atau try-import
bersifat khusus: gunakan baris ini untuk memuat
"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 import
tidak ada (atau tidak dapat dibaca), tetapi tidak untuk file try-import
.
Prioritas impor:
- Opsi dalam file yang diimpor lebih diutamakan daripada opsi yang ditentukan sebelumnya pernyataan impor.
- Opsi yang ditentukan setelah pernyataan impor didahulukan daripada pilihan di 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 menentukan kapan default berikut akan diterapkan:
startup
: opsi startup, yang berjalan sebelum perintah, dan dijelaskan dalambazel help startup_options
.common
: opsi yang harus diterapkan pada semua perintah Bazel yang mendukung mereka. Jika sebuah perintah tidak mendukung opsi yang ditentukan dengan cara ini, opsi tersebut akan diabaikan selama valid untuk beberapa perintah Bazel lainnya. Perhatikan bahwa ini hanya berlaku untuk nama opsi: Jika perintah saat ini menerima opsi dengan nama yang ditentukan, tetapi tidak mendukung nilai yang ditentukan, sistem itu akan gagal.always
: opsi yang berlaku untuk semua perintah Bazel. Jika perintah tidak mendukung opsi yang ditentukan dengan cara ini, maka akan gagal.command
: Perintah Bazel, sepertibuild
atauquery
yang opsinya mendaftar. Opsi ini juga berlaku untuk semua perintah yang mewarisi dari perintah yang ditentukan. (Misalnya,test
mewarisi daribuild
.)
Masing-masing baris ini bisa digunakan lebih dari sekali dan argumen yang mengikuti
kata pertama digabungkan seolah-olah kata tersebut muncul pada satu baris. (Pengguna CVS,
alat lain dengan "pisau
tentara Swiss" baris perintah, akan menemukan
yang mirip dengan .cvsrc
.) Misalnya, baris:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
digabungkan sebagai:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
sehingga flag yang efektif adalah --verbose_failures
dan --test_tmpdir=/tmp/bar
.
Prioritas opsi:
- Opsi pada command line selalu diprioritaskan daripada opsi di file rc.
Misalnya, jika file rc mengatakan
build -c opt
tetapi tanda baris perintahnya adalah-c dbg
, flag command line akan diprioritaskan. Dalam file rc, prioritas diatur oleh kekhususan: baris untuk perintah perintah tertentu lebih diutamakan daripada baris untuk perintah yang kurang spesifik.
Kekhususan ditentukan oleh pewarisan. Beberapa perintah mewarisi opsi dari perintah lain, membuat perintah yang mewarisi lebih spesifik daripada {i>base<i} perintah. Misalnya,
test
mewarisi dari perintahbuild
, sehingga semua tandabazel build
valid untukbazel test
, dan semua barisbuild
juga berlaku untukbazel test
kecuali jika ada baristest
untuk opsi yang sama. Jika rc file mengatakan:test -c dbg --test_env=PATH
build -c opt --verbose_failures
maka
bazel build //foo
akan menggunakan-c opt --verbose_failures
, danbazel test //foo
akan menggunakan--verbose_failures -c dbg --test_env=PATH
.Grafik pewarisan (kekhususan) adalah:
- Setiap perintah mewarisi dari
common
- Perintah berikut mewarisi dari (dan lebih spesifik dari)
build
:test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
, danaquery
coverage
mewarisi daritest
- Setiap perintah mewarisi dari
Dua baris yang menentukan opsi untuk perintah yang sama dengan kekhususan yang sama diurai sesuai urutan kemunculannya dalam file.
Karena aturan prioritas ini tidak cocok dengan urutan file, keterbacaan jika Anda mengikuti urutan prioritas dalam file rc: mulai dengan
common
di bagian atas, dan akhiri dengan perintah yang paling spesifik di bagian bawah file. Dengan cara ini, urutan opsi dibaca adalah sama dengan urutan penerapannya, yang lebih intuitif.
Argumen yang ditetapkan pada baris file rc dapat menyertakan argumen yang bukan opsi, seperti nama target build, dan seterusnya. Ini, seperti opsi yang ditentukan dalam file yang sama, memiliki prioritas lebih rendah daripada saudaranya di baris perintah, dan selalu ditambahkan ke daftar eksplisit dari argumen opsi.
--config
Selain opsi setelan default, file rc dapat digunakan untuk mengelompokkan opsi
dan memberikan singkatan untuk pengelompokan umum. Hal ini dilakukan dengan menambahkan :name
akhiran pada perintah tersebut. Opsi ini diabaikan secara default, tetapi akan
disertakan jika opsi --config=name
ada,
baik di command line atau dalam file .bazelrc
, secara rekursif, bahkan di dalam
definisi konfigurasi lainnya. 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 di
file rc "di tempat" sehingga opsi
yang ditentukan untuk konfigurasi memiliki prioritas yang sama dengan opsi --config=foo
miliki.
Sintaksis ini tidak mencakup penggunaan startup
untuk menetapkan
opsi startup. Latar (Setting)
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 Anda ingin untuk diabaikan oleh Bazel, seperti project terkait
yang menggunakan sistem build lain. Tempatkan file bernama
.bazelignore
di root ruang kerja
dan tambahkan direktori yang ingin
Anda abaikan untuk Bazel, satu per
garis. Entri berhubungan dengan root ruang kerja.
File bazelrc global
Bazel membaca file bazelrc opsional dalam urutan berikut:
- File rc sistem yang terletak di etc/bazel.bazelrc
.
- File rc Workspace yang terletak di $workspace/tools/bazel.rc
.
- File rc beranda yang dilokalkan di $HOME/.bazelrc
Setiap file bazelrc yang tercantum di sini memiliki tanda 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
.