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

Menulis file konfigurasi bazelrc

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

Bazel menerima banyak opsi. Beberapa opsi bervariasi (misalnya, --subcommands) sementara opsi yang lain tetap sama di beberapa build (seperti --package_path). Agar tidak menentukan 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 berada?

Bazel mencari file konfigurasi opsional di lokasi berikut, dalam urutan yang ditunjukkan di bawah ini. Opsi ini 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 dimuat adalah opsi startup, yang berarti opsi tersebut harus terjadi setelah bazel dan sebelum perintah (build, test, dll.).

  1. File RC sistem, kecuali --nosystem_rc ada.

    Lokasi:

    • Pada Linux/macOS/Unixes: /etc/bazel.bazelrc
    • Pada Windows: %ProgramData%\bazel.bazelrc

    Bukan error jika file ini tidak ada.

    Jika lokasi lain yang ditentukan sistem diperlukan, Anda harus membuat biner Bazel kustom, menggantikan 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.

  2. File RC ruang kerja, kecuali jika ada --noworkspace_rc.

    Jalur: .bazelrc di direktori ruang kerja (di samping file WORKSPACE utama).

    Bukan error jika file ini tidak ada.

  3. File RC rumah, kecuali jika ada --nohome_rc.

    Lokasi:

    • Pada Linux/macOS/Unixes: $HOME/.bazelrc
    • Pada Windows: %USERPROFILE%\.bazelrc jika ada, atau %HOME%/.bazelrc

    Bukan error jika file ini tidak ada.

  4. 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 lebih lanjut 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 dan y.rc dibaca.
    • z.rc diabaikan karena /dev/null sebelumnya.

Selain file konfigurasi opsional ini, Bazel mencari file rc global. Untuk detail selengkapnya, lihat bagian bazel global.

Sintaksis .bazelrc dan semantik

Seperti semua file "rc" UNIX, file .bazelrc adalah file teks dengan tata bahasa berbasis baris. Baris dan baris kosong yang dimulai dengan # (komentar) akan diabaikan. Setiap baris berisi urutan kata, yang dibuat tokennya berdasarkan aturan yang sama dengan shell Bourne.

Impor

Baris yang diawali 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 try-import.

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 di file yang diimpor nanti lebih diprioritaskan daripada file yang diimpor sebelumnya.

Opsi default

Sebagian besar baris bazelrc menetapkan nilai opsi default. Kata pertama di setiap baris menentukan kapan default ini diterapkan:

  • startup: opsi startup, yang berada di depan perintah, dan dijelaskan di bazel help startup_options.
  • common: opsi yang berlaku untuk semua perintah Bazel.
  • command: Perintah Bazel, seperti build atau query tempat opsi diterapkan. Opsi ini juga berlaku untuk semua perintah yang diturunkan dari perintah yang ditentukan. (Misalnya, test mewarisi dari build.)

Setiap baris ini dapat digunakan lebih dari sekali dan argumen yang mengikuti kata pertama digabungkan, seolah-olah argumen tersebut telah muncul dalam satu baris. (Pengguna CVS, alat lain dengan antarmuka command line "Swiss army knife"), akan menemukan sintaksis yang serupa dengan .cvsrc.) Misalnya, baris berikut:

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 tanda yang efektif adalah --verbose_failures dan --test_tmpdir=/tmp/bar.

Prioritas opsi:

  • Opsi pada command line selalu lebih diutamakan daripada opsi dalam file rc. Misalnya, jika file rc mengatakan build -c opt tetapi tanda command line -c dbg, tanda command line akan 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 turunan. Beberapa perintah mewarisi opsi dari perintah lain, sehingga perintah yang mewarisi akan lebih spesifik daripada perintah dasar. Misalnya, test mewarisi dari perintah build, sehingga semua tanda bazel build valid untuk bazel test, dan semua baris build juga berlaku untuk bazel test kecuali jika ada test baris untuk opsi yang sama. Jika file rc menyatakan:

    test -c dbg --test_env=PATH
    build -c opt --verbose_failures
    

    lalu bazel build //foo akan menggunakan -c opt --verbose_failures, dan bazel test //foo akan menggunakan --verbose_failures -c dbg --test_env=PATH.

    Grafik pewarisan (kekhususan) adalah:

    • Setiap perintah mewarisi dari common
    • Perintah berikut mewarisi (dan lebih spesifik dari) build: test, run, clean, mobile-install, info, print_action, config, cquery, dan aquery
    • coverage mewarisi dari test
  • 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, hal ini membantu keterbacaan jika Anda mengikuti urutan prioritas dalam file rc: mulai dengan opsi common di bagian atas, dan akhiri dengan perintah yang paling spesifik di bagian bawah file. Dengan cara ini, urutan pembacaan opsi yang sama dengan urutan penerapannya, yang lebih intuitif.

Argumen yang ditentukan pada baris file rc dapat menyertakan argumen yang bukan opsi, seperti nama target build, dan sebagainya. Semua ini, seperti opsi yang ditentukan dalam file yang sama, memiliki prioritas lebih rendah daripada 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 ke perintah. Opsi ini diabaikan secara default, tetapi akan disertakan saat opsi --config=name ada, baik di command line maupun di file .bazelrc, secara rekursif, bahkan di dalam bagian lain definisi konfigurasi. Opsi yang ditentukan oleh command:name hanya akan diperluas untuk perintah yang berlaku, sesuai urutan prioritas yang dijelaskan di atas.

--config=foo diperluas ke opsi yang ditentukan dalam file rc "in-place" sehingga opsi yang ditentukan untuk konfigurasi memiliki prioritas yang sama dengan opsi --config=foo ada.

Sintaksis ini tidak mencakup penggunaan startup untuk menetapkan opsi startup. Menyetel startup:config-name --some_startup_option dalam .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 Bazel, seperti project terkait yang menggunakan sistem build lain. Tempatkan file bernama .bazelignore di root ruang kerja dan tambahkan direktori yang Anda inginkan untuk diabaikan oleh Bazel, satu direktori per baris. Entri relatif terhadap root ruang kerja.

File bazel merek global

Bazel membaca file bazel opsional dalam urutan ini: - Sistem rc-file yang terletak di etc/bazel.bazelrc. - File rc Workspace yang berada di $workspace/tools/bazel.rc. - File rc rumah yang dilokalkan 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 startup --ignore_all_rc_files.