Bazel birçok seçeneği kabul eder. Bazı seçenekler sık sık değişirken (örneğin, --subcommands
) diğerleri birkaç derlemede aynı kalır (örneğin, --package_path
). Değişmeyen bu seçenekleri her derleme (ve diğer komutlar) için belirtmekten kaçınmak amacıyla seçenekleri .bazelrc
adlı bir yapılandırma dosyasında belirtebilirsiniz.
.bazelrc
dosyaları nerede?
Bazel, isteğe bağlı yapılandırma dosyalarını aşağıdaki konumlarda, aşağıda gösterilen sırayla arar. Seçenekler bu sırayla yorumlanır. Bu nedenle, daha sonraki dosyalardaki seçenekler, bir çakışma meydana gelirse önceki dosyadaki bir değeri geçersiz kılabilir. Bu dosyalardan hangilerinin yükleneceğini kontrol eden tüm seçenekler başlangıç seçenekleridir. Yani bazel
'ten sonra ve komuttan (build
, test
vb.) önce gerçekleşmelidir.
--nosystem_rc
yoksa sistem RC dosyası.Yol:
- Linux/macOS/Unix'te:
/etc/bazel.bazelrc
- Windows'da:
%ProgramData%\bazel.bazelrc
Bu dosya mevcut değilse hata oluşmaz.
Sistem tarafından belirtilen başka bir konum gerekliyse
//src/main/cpp:option_processor
içindekiBAZEL_SYSTEM_BAZELRC_PATH
değerini geçersiz kılarak özel bir Bazel ikili programı oluşturmanız gerekir. Sistem tarafından belirtilen konum, Unix'te${VAR_NAME}
veya Windows'ta%VAR_NAME%
gibi ortam değişkeni referansları içerebilir.- Linux/macOS/Unix'te:
--noworkspace_rc
mevcut değilse çalışma alanı RC dosyası.Yol: Çalışma alanı dizininizdeki
.bazelrc
(anaWORKSPACE
dosyasının yanında).Bu dosya mevcut değilse hata oluşmaz.
--nohome_rc
yoksa ana RC dosyası.Yol:
- Linux/macOS/Unix'te:
$HOME/.bazelrc
- Windows'ta: Varsa
%USERPROFILE%\.bazelrc
veya%HOME%/.bazelrc
Bu dosya mevcut değilse hata oluşmaz.
- Linux/macOS/Unix'te:
--bazelrc=file
ile belirtilmişse kullanıcı tarafından belirtilen RC dosyasıBu işaret isteğe bağlıdır, ancak birden çok kez belirtilebilir.
/dev/null
, sonraki tüm--bazelrc
değerlerinin yoksayılacağı anlamına gelir. Bu, sürüm derlemelerinde olduğu gibi kullanıcı rc dosyasının aranmasını devre dışı bırakmak için kullanışlıdır.Örneğin:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
x.rc
vey.rc
okunur.z.rc
, önceki/dev/null
nedeniyle yoksayıldı.
Bazel, bu isteğe bağlı yapılandırma dosyasına ek olarak genel bir rc dosyası arar. Daha fazla bilgi için global bazelrc bölümüne bakın.
.bazelrc
söz dizimi ve anlamları
Tüm UNIX "rc" dosyaları gibi .bazelrc
dosyası da satır tabanlı bir dil bilgisine sahip bir metin dosyasıdır. Boş satırlar ve #
ile başlayan satırlar (yorumlar) yok sayılır. Her satır, Bourne kabuğuyla aynı kurallara göre parçalara ayrılmış bir kelime dizisi içerir.
İçe aktarılanlar
import
veya try-import
ile başlayan satırlar özeldir: diğer "rc" dosyalarını yüklemek için bunları kullanın. Çalışma alanı köküne göre bir yol belirtmek için import %workspace%/path/to/bazelrc
yazın.
import
ve try-import
arasındaki fark, import
ile biten dosya eksikse (veya okunamıyorsa) Bazel'in başarısız olması, try-import
ile biten dosya için ise başarısız olmamasıdır.
İçe aktarma önceliği:
- İçe aktarılan dosyanın seçenekleri, içe aktarma ifadesi öncesinde belirtilen seçeneklere göre önceliklidir.
- İçe aktarma ifadesi sonrasında belirtilen seçenekler, içe aktarılan dosyadaki seçeneklere göre önceliklidir.
- Daha sonra içe aktarılan dosyalardaki seçenekler, daha önce içe aktarılan dosyalara göre önceliklidir.
Seçenek varsayılanları
bazelrc dosyasının çoğu satırı varsayılan seçenek değerlerini tanımlar. Her satırın ilk kelimesi, bu varsayılanların ne zaman uygulanacağını belirtir:
startup
: Komutun önüne gelen vebazel help startup_options
bölümünde açıklanan başlangıç seçenekleri.common
: Tüm Bazel komutları için geçerli olan seçenekler.command
: Seçeneklerin geçerli olduğu Bazel komutu (ör.build
veyaquery
). Bu seçenekler, belirtilen komuttan devralınan tüm komutlar için de geçerlidir. (Örneğin,test
,build
öğesinden devralır.)
Bu satırların her biri birden fazla kez kullanılabilir ve ilk kelimeyi izleyen bağımsız değişkenler tek bir satırda görünmüş gibi birleştirilir. ("İsviçre çakısı" komut satırı arayüzüne sahip başka bir araç olan CVS kullanıcıları, söz dizimi .cvsrc
'e benzer bir yapıda bulur.) Örneğin, şu satırlar:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
şu şekilde birleştirilir:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
Bu nedenle, etkili işaretler --verbose_failures
ve --test_tmpdir=/tmp/bar
'dır.
Seçenek önceliği:
- Komut satırındaki seçenekler, rc dosyalarındaki seçeneklere göre her zaman önceliklidir.
Örneğin, bir rc dosyasında
build -c opt
yazıyorsa ancak komut satırı işareti-c dbg
ise komut satırı işareti önceliklidir. rc dosyasında öncelik, spesifikliğe göre belirlenir: Daha spesifik bir komutun satırları, daha az spesifik bir komutun satırlarına göre önceliklidir.
Belirlilik, devralma ile tanımlanır. Bazı komutlar diğer komutların seçeneklerini devralır. Bu da devralınan komutu temel komuttan daha ayrıntılı hale getirir. Örneğin
test
,build
komutundan devraldığı için tümbazel build
işaretleribazel test
için geçerlidir. Aynı seçenek için birtest
satırı yoksa tümbuild
satırları,bazel test
için de geçerlidir. rc dosyasında şu bilgiler yer alıyorsa:test -c dbg --test_env=PATH
build -c opt --verbose_failures
bazel build //foo
,-c opt --verbose_failures
'u,bazel test //foo
ise--verbose_failures -c dbg --test_env=PATH
'ı kullanır.Devralma (belirginlik) grafiği şu şekildedir:
- Her komut
common
'ten devralır - Şu komutlar
build
öğesinden devralınır (ve daha spesifiktir):test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
veaquery
coverage
,test
adlı kuruluş biriminden devralındı
- Her komut
Aynı komut için eşit düzeyde ayrıntılı seçenekleri belirten iki satır, dosyada göründükleri sırayla ayrıştırılır.
Bu öncelik kuralı dosya sırasıyla eşleşmediğinden, rc dosyalarında öncelik sırasını takip etmek okunabilirliği artırır: Üstte
common
seçenekleriyle başlayın ve dosyanın en altında en spesifik komutlarla bitirin. Bu sayede, seçeneklerin okunma sırası, uygulanma sırasıyla aynı olur ve daha sezgisel bir deneyim sağlanır.
Bir rc dosyasının satırında belirtilen bağımsız değişkenler, seçenek olmayan bağımsız değişkenler (ör. derleme hedeflerinin adları) içerebilir. Aynı dosyalarda belirtilen seçenekler gibi bunlar da komut satırındaki kardeşlerine göre daha düşük önceliğe sahiptir ve her zaman seçenek olmayan bağımsız değişkenlerin açık listesine eklenir.
--config
rc dosyası, seçenek varsayılanlarını ayarlamaya ek olarak seçenekleri gruplandırmak ve yaygın gruplandırmalar için bir kısaltma sunmak için de kullanılabilir. Bu işlem, komuta bir :name
son eki ekleyerek yapılır. Bu seçenekler varsayılan olarak yoksayılır ancak --config=name
seçeneği varsa komut satırında veya .bazelrc
dosyasında, yinelemeli olarak, hatta başka bir yapılandırma tanımının içinde olsa bile dahil edilir. command:name
ile belirtilen seçenekler yalnızca geçerli komutlar için yukarıda açıklanan öncelik sırasına göre genişletilir.
--config=foo
, yapılandırma için belirtilen seçeneklerin --config=foo
seçeneğinin sahip olduğu önceliğe sahip olması amacıyla rc dosyalarında tanımlanan seçenekleri "yerinde" genişletir.
Bu söz dizimi, başlangıç seçeneklerini ayarlamak için startup
kullanımıyla ilgili değildir. .bazelrc dosyasındaki startup:config-name --some_startup_option
ayarı yok sayılır.
Örnek
Aşağıda bir ~/.bazelrc
dosyası örneği verilmiştir:
# 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
Bazel'in davranışını yöneten diğer dosyalar
.bazelignore
Çalışma alanı içinde, başka derleme sistemlerini kullanan ilgili projeler gibi Bazel'ın yoksaymasını istediğiniz dizinleri belirtebilirsiniz. Çalışma alanının köküne .bazelignore
adlı bir dosya yerleştirin ve Bazel'in yoksaymasını istediğiniz dizinleri her satırda bir olacak şekilde ekleyin. Girişler, çalışma alanı köküne göre değişir.
Global bazelrc dosyası
Bazel, isteğe bağlı bazelrc dosyalarını şu sırayla okur:
- etc/bazel.bazelrc
adresindeki sistem rc dosyası.
- $workspace/tools/bazel.rc
adresindeki Workspace rc dosyası.
- $HOME/.bazelrc
adresinde bulunan ana rc dosyası
Burada listelenen her bazelrc dosyasının, devre dışı bırakmak için kullanılabilecek bir işareti vardır (ör. --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). Ayrıca, --ignore_all_rc_files
başlangıç seçeneğini ileterek Bazel'in tüm bazelrc dosyalarını yoksaymasını sağlayabilirsiniz.