Bazel menerima banyak opsi. Beberapa opsi sering bervariasi (misalnya,
--subcommands
) sementara yang lain tetap sama di beberapa build (seperti
--package_path
). Agar tidak menentukan opsi yang tidak diubah ini untuk setiap build
(dan perintah lainnya), Anda dapat menentukan opsi di file konfigurasi, yang disebut
.bazelrc
.
Di mana file .bazelrc
berada?
Bazel mencari file konfigurasi opsional di lokasi berikut,
dalam urutan yang ditunjukkan di bawah ini. Opsi tersebut ditafsirkan dalam urutan ini, sehingga
opsi dalam file berikutnya dapat mengganti nilai dari file sebelumnya jika
terjadi konflik. Semua opsi yang mengontrol file mana yang akan dimuat adalah
opsi startup, yang berarti opsi tersebut harus muncul setelah bazel
dan
sebelum perintah (build
, test
, dll.).
File RC sistem, kecuali jika ada
--nosystem_rc
.Lokasi:
- Di Linux/macOS/Unixes:
/etc/bazel.bazelrc
- Pada Windows:
%ProgramData%\bazel.bazelrc
Tidak akan terjadi error jika file ini tidak ada.
Jika lokasi lain yang ditentukan sistem diperlukan, Anda harus membuat biner Bazel kustom, yang menggantikan nilai
BAZEL_SYSTEM_BAZELRC_PATH
di//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/Unixes:
File RC workspace, kecuali jika ada
--noworkspace_rc
.Jalur:
.bazelrc
di direktori ruang kerja Anda (di samping fileWORKSPACE
utama).Tidak akan terjadi error jika file ini tidak ada.
File RC beranda, kecuali jika ada
--nohome_rc
.Lokasi:
- Di Linux/macOS/Unixes:
$HOME/.bazelrc
- Di Windows:
%USERPROFILE%\.bazelrc
jika ada, atau%HOME%/.bazelrc
Tidak akan terjadi error jika file ini tidak ada.
- Di Linux/macOS/Unixes:
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
berikutnya 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.rc
x.rc
dany.rc
telah dibaca.z.rc
diabaikan karena/dev/null
sebelumnya.
Selain file konfigurasi opsional ini, Bazel juga 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 rangkaian kata yang ditokenkan menurut aturan yang sama dengan 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 bahwa Bazel gagal jika
file import
tidak ada (atau tidak dapat dibaca), tetapi tidak untuk file
yang mengalami try-import
.
Prioritas impor:
- Opsi dalam file yang diimpor lebih diprioritaskan 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 diprioritaskan daripada file yang diimpor sebelumnya.
Opsi default
Sebagian besar baris bazelrc menentukan nilai opsi default. Kata pertama di setiap baris menentukan kapan default ini diterapkan:
startup
: opsi startup, yang terletak 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 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, 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, sepertibuild
atauquery
tempat opsi diterapkan. Opsi ini juga berlaku untuk semua perintah yang mewarisi dari perintah yang ditentukan. (Misalnya,test
mewarisi 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 tentara Swiss", akan menemukan
sintaksis 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
jadi tanda yang efektif adalah --verbose_failures
dan --test_tmpdir=/tmp/bar
.
Prioritas opsi:
- Opsi pada command line selalu lebih diutamakan daripada opsi pada file rc.
Misalnya, jika file rc mengatakan
build -c opt
, tetapi tanda command line-nya adalah-c dbg
, tanda 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 didefinisikan oleh pewarisan. Beberapa perintah mewarisi opsi dari perintah lain, sehingga perintah pewarisan lebih spesifik daripada perintah dasar. 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 file rc mengatakan:test -c dbg --test_env=PATH
build -c opt --verbose_failures
lalu
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 daripada)
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 akan diuraikan sesuai urutan kemunculannya dalam file.
Karena aturan prioritas ini tidak cocok dengan urutan file, aturan ini akan membantu keterbacaan jika Anda mengikuti urutan prioritas dalam file rc: dimulai dengan opsi
common
di bagian atas, dan diakhiri 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 menyertakan argumen yang bukan merupakan opsi, seperti nama target build, dan seterusnya. Argumen ini, seperti opsi yang ditentukan dalam file yang sama, memiliki prioritas lebih rendah daripada opsi yang setara pada command line, dan selalu ditambahkan ke daftar eksplisit argumen non- opsi.
--config
Selain menyetel default opsi, file rc dapat digunakan untuk mengelompokkan opsi
dan memberikan cara pintas untuk pengelompokan umum. Hal ini dilakukan dengan menambahkan
akhiran :name
pada perintah. Opsi ini diabaikan secara default, tetapi akan
disertakan jika opsi --config=name
ada,
baik pada 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
.
Sintaksis ini tidak diperluas ke penggunaan startup
untuk menetapkan
opsi startup. Menetapkan
startup:config-name --some_startup_option
dalam .bazelrc akan diabaikan.
--enable_platform_specific_config
Konfigurasi khusus platform di .bazelrc
dapat diaktifkan secara otomatis menggunakan
--enable_platform_specific_config
. Misalnya, jika OS host adalah Linux dan
perintah build
dijalankan, konfigurasi build:linux
akan
otomatis diaktifkan. ID OS yang didukung adalah linux
, macos
, windows
,
freebsd
, dan openbsd
. Mengaktifkan flag ini sama dengan menggunakan
--config=linux
di Linux, --config=windows
di Windows, dan sebagainya.
Lihat --enable_platform_specific_config.
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 Anda ingin abaikan oleh Bazel, satu per
baris. Entri akan terkait 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 berada di
$workspace/tools/bazel.rc
. - File rc rumah yang terletak di
$HOME/.bazelrc
Setiap file bazelrc yang tercantum di sini memiliki flag terkait yang dapat digunakan untuk menonaktifkannya (misalnya --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). Anda juga dapat membuat Bazel mengabaikan semua bazelrc dengan meneruskan opsi memulai --ignore_all_rc_files
.