Bazel birçok seçeneği kabul eder. Bazı seçenekler sık sık değişiklik gösterir (örneğin, --subcommands
), diğerleri birden fazla derlemede (ör. --package_path
) aynı kalır. Değiştirilmeyen bu seçenekleri her derleme (ve diğer komutlar) için belirtmekten kaçınmak için .bazelrc
adlı bir yapılandırma dosyasında seçenekleri belirtebilirsiniz.
.bazelrc
dosyaları nerede?
Bazel, aşağıda gösterilen sırayla aşağıdaki konumlarda isteğe bağlı yapılandırma dosyalarını arar. Seçenekler bu sıraya göre yorumlandığından sonraki dosyalarda açılan seçenekler, bir çakışma olması durumunda ö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. Diğer bir deyişle, bunların bazel
sonrasında ve komuttan (build
, test
vb.) önce yapılması gerekir.
--nosystem_rc
yoksa sistem RC dosyası.Yol:
- Linux/macOS/Unixes'te:
/etc/bazel.bazelrc
- Windows'da:
%ProgramData%\bazel.bazelrc
Bu dosya mevcut değilse hata olmaz.
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'da%VAR_NAME%
gibi ortam değişkeni referansları içerebilir.- Linux/macOS/Unixes'te:
--noworkspace_rc
yoksa çalışma alanı RC dosyası.Yol:
.bazelrc
, Workspace dizininizde (anaWORKSPACE
dosyasının yanında).Bu dosya mevcut değilse hata olmaz.
--nohome_rc
yoksa ana sayfa RC dosyası.Yol:
- Linux/macOS/Unixes'te:
$HOME/.bazelrc
- Windows'da: Varsa
%USERPROFILE%\.bazelrc
veya%HOME%/.bazelrc
Bu dosya mevcut değilse hata olmaz.
- Linux/macOS/Unixes'te:
--bazelrc=file
ile belirtilirse kullanıcı tarafından belirtilen RC dosyasıBu işaret isteğe bağlıdır, ancak birden çok kez belirtilebilir.
/dev/null
, diğer tüm--bazelrc
'ların yoksayılacağını belirtir. Bu, sürüm derlemeleri gibi bir kullanıcı rc dosyası için arama yapılmasını devre dışı bırakmak açısından kullanışlıdır.Örneğin:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
x.rc
vey.rc
okundu.z.rc
, önceki/dev/null
nedeniyle yoksayıldı.
Bazel, bu isteğe bağlı yapılandırma dosyasına ek olarak global bir rc dosyası da arar. Daha ayrıntılı 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ı dilbilgisi içeren bir metin dosyasıdır. #
ile başlayan boş satırlar ve satırlar (yorumlar) yoksayılır. Her satır, Bourne kabuğuyla aynı kurallara göre belirlenen bir kelime dizisi içerir.
İçe Aktarımlar
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 bağlı bir yol belirtmek için import %workspace%/path/to/bazelrc
yazın.
import
ile try-import
arasındaki fark, import
'deki dosya eksik olduğunda (veya okunamadığında) Bazel'in başarısız olmasıdır. Ancak try-import
'lı bir dosya için bu durum söz konusu değildir.
İçe aktarma önceliği:
- İçe aktarılan dosyadaki seçenekler, içe aktarma ifadesinden önce belirtilen seçeneklere göre önceliklidir.
- İçe aktarma ifadesinden sonra 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'teki çoğu satır, varsayılan seçenek değerlerini tanımlar. Her satırdaki ilk kelime, bu varsayılanların ne zaman uygulandığını belirtir:
startup
: Komuttan önce gelen vebazel help startup_options
bölümünde açıklanan başlatma seçenekleri.common
: Destekleyen tüm Bazel komutlarına uygulanması gereken seçenekler. Bir komut bu şekilde belirtilen bir seçeneği desteklemiyorsa başka bir Bazel komutu için geçerli olduğu sürece söz konusu seçenek yoksayılır. Bunun yalnızca seçenek adları için geçerli olduğunu unutmayın: Geçerli komut, belirtilen ada sahip bir seçeneği kabul ediyor ancak belirtilen değeri desteklemiyorsa komut başarısız olur.always
: Tüm Bazel komutları için geçerli seçenekler. Bir komut bu şekilde belirtilen bir seçeneği desteklemiyorsa başarısız olur.command
: Seçeneklerin geçerli olduğubuild
veyaquery
gibi Bazel komutu. Bu seçenekler, belirtilen komuttan devralan tüm komutlar için de geçerlidir. (Örneğin,test
,build
öğesinden devralır.)
Bu satırların her biri birden çok 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 bıçağı" komut satırı arayüzüne sahip başka bir araç olan CVS kullanıcıları, .cvsrc
ile benzer bir söz dizimi 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
şeklindedir.
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ı
build -c opt
diyor ancak komut satırı işareti-c dbg
ise komut satırı işareti öncelikli olur. rc dosyası içinde öncelik, belirginliğe göre belirlenir: Daha özel bir komutun satırları, daha az spesifik bir komutun satırlarına göre önceliklidir.
Belirginlik, kalıtımla 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 şöyle bir şey olursa:test -c dbg --test_env=PATH
build -c opt --verbose_failures
ardından
bazel build //foo
-c opt --verbose_failures
kullanacak,bazel test //foo
ise--verbose_failures -c dbg --test_env=PATH
adresini kullanacak.Devralma (belirginlik) grafiği şu şekildedir:
- Her komut
common
öğesinden 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
kaynağından devralır
- Her komut
Aynı komut için seçenekleri eşit belirginlikte belirten iki satır, dosyada göründükleri sıraya göre ayrıştırılır.
Bu öncelik kuralı, dosya sırası ile eşleşmediğinden, rc dosyalarındaki öncelik sırasını izlerseniz okunabilirliğe yardımcı olur: En üstte
common
seçenekleriyle başlayın ve dosyanın en altında en spesifik komutlarla bitirin. Böylece, seçeneklerin okunma sırası, uygulandıkları sırayla aynıdır ve daha sezgisel olur.
Bir rc dosyasının bir satırında belirtilen bağımsız değişkenler, derleme hedeflerinin adları gibi seçenek olmayan bağımsız değişkenler içerebilir. Bunlar, aynı dosyalarda belirtilen seçenekler gibi, komut satırındaki eşdüzeylerinden daha düşük önceliğe sahiptir ve her zaman isteğe bağlı olmayan bağımsız değişkenler listesinin başına eklenir.
--config
rc dosyası, seçenek varsayılanlarını ayarlamaya ek olarak seçenekleri gruplandırmak ve ortak gruplamalar için bir kısaltma sağlamak 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
tarafından 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 olacak şekilde rc dosyalarında "yerinde" tanımlanan seçeneklere genişler.
Bu söz dizimi, başlangıç seçeneklerini ayarlamak için startup
kullanımını kapsamaz. .bazelrc dosyasındaki startup:config-name --some_startup_option
ayarı yok sayılır.
Örnek
Aşağıda örnek bir ~/.bazelrc
dosyası 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 konumuna .bazelignore
adlı bir dosya yerleştirin ve Bazel'in yoksaymasını istediğiniz dizinleri her satıra bir tane gelecek ş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:
- Sistem rc dosyası
etc/bazel.bazelrc
konumunda bulunuyor. - Workspace rc dosyası
$workspace/tools/bazel.rc
adresinde. - Ana sayfa rc dosyası
$HOME/.bazelrc
konumunda bulunuyor
Burada listelenen her bazelrc dosyası, devre dışı bırakmak için kullanılabilen bir işarete sahiptir (ör. --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). --ignore_all_rc_files
başlangıç seçeneğini ileterek Bazel'in tüm bazelrc'leri yoksaymasını da sağlayabilirsiniz.