Bazel birçok seçeneği kabul eder. Bazı seçenekler sık sık değişirken (ör. --subcommands
) diğerleri birkaç derleme boyunca aynı kalır (ör. --package_path
). Değişmeyen bu seçenekleri her derleme için (ve diğer komutlar için) belirtmekten kaçınmak istiyorsanız seçenekleri .bazelrc
adlı bir yapılandırma dosyasında belirtebilirsiniz.
.bazelrc
dosyaları nerede bulunur?
Bazel, isteğe bağlı yapılandırma dosyalarını aşağıdaki konumlarda ve aşağıda gösterilen sırayla arar. Seçenekler bu sırayla yorumlanır. Bu nedenle, bir çakışma oluşursa sonraki dosyalardaki seçenekler önceki dosyalardaki bir değeri geçersiz kılabilir. Bu dosyalardan hangilerinin yükleneceğini kontrol eden tüm seçenekler başlangıç seçenekleridir. Bu nedenle, bazel
'dan sonra ve komuttan (build
, test
vb.) önce gelmelidir.
--nosystem_rc
mevcut olmadığı sürece sistem RC dosyası.Yol:
- Linux/macOS/Unix'te:
/etc/bazel.bazelrc
- Windows'da:
%ProgramData%\bazel.bazelrc
Bu dosya mevcut değilse hata oluşmaz.
Başka bir sistem tarafından belirtilen konum gerekliyse
//src/main/cpp:option_processor
içindeBAZEL_SYSTEM_BAZELRC_PATH
değerini geçersiz kılarak özel bir Bazel ikilisi oluşturmanız gerekir. Sistem tarafından belirtilen konum, ortam değişkeni referansları içerebilir. Örneğin, Unix'te${VAR_NAME}
veya Windows'da%VAR_NAME%
.- Linux/macOS/Unix'te:
--noworkspace_rc
mevcut olmadığı sürece çalışma alanı RC dosyası.Yol: Çalışma alanı dizininizde
.bazelrc
(anaWORKSPACE
dosyasının yanında).Bu dosya mevcut değilse hata oluşmaz.
--nohome_rc
mevcut değilse ana RC dosyası.Yol:
- Linux/macOS/Unix'te:
$HOME/.bazelrc
- Windows'da:
%USERPROFILE%\.bazelrc
varsa veya%HOME%/.bazelrc
Bu dosya mevcut değilse hata oluşmaz.
- Linux/macOS/Unix'te:
Kullanıcı tarafından belirtilen RC dosyası,
--bazelrc=file
ile belirtilmişseBu işaret isteğe bağlıdır ancak birden çok kez de belirtilebilir.
/dev/null
, bundan sonraki tüm--bazelrc
'lerin yoksayılacağını gösterir. Bu, yayın derlemelerinde olduğu gibi, kullanıcı rc dosyası araması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ılıyor.
Bazel, bu isteğe bağlı yapılandırma dosyasına ek olarak genel bir rc dosyası da arar. Daha fazla bilgi için global bazelrc bölümüne bakın.
.bazelrc
söz dizimi ve semantik
Tüm UNIX "rc" dosyaları gibi, .bazelrc
dosyası da satır tabanlı bir dilbilgisine sahip metin dosyasıdır. Boş satırlar ve #
ile başlayan satırlar (yorumlar) yoksayılır. Her satırda, Bourne kabuğuyla aynı kurallara göre belirteçlere ayrılmış bir kelime dizisi bulunur.
İçe aktarılanlar
import
veya try-import
ile başlayan satırlar özeldir: Bunları diğer "rc" dosyalarını yüklemek için 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 oluşturulan dosya eksikse (veya okunamıyorsa) Bazel'in başarısız olmasıdır. Ancak try-import
ile oluşturulan dosya için bu durum geçerli 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ı
Bir bazelrc dosyasındaki ç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şlangıç seçenekleri.common
: Kendilerini destekleyen tüm Bazel komutlarına uygulanması gereken seçenekler. Bir komut, bu şekilde belirtilen bir seçeneği desteklemiyorsa seçenek, bazı diğer Bazel komutları için geçerli olduğu sürece yoksayılır. Bu durumun yalnızca seçenek adları için geçerli olduğunu unutmayın: Geçerli komut, belirtilen ada sahip bir seçeneği kabul ediyorsa ancak belirtilen değeri desteklemiyorsa başarısız olur.always
: Tüm Bazel komutları için geçerli olan seçenekler. Bir komut, bu şekilde belirtilen bir seçeneği desteklemiyorsa başarısız olur.command
: Seçeneklerin uygulandığıbuild
veyaquery
gibi Bazel komutu. Bu seçenekler, belirtilen komuttan devralınan tüm komutlar için de geçerlidir. (Örneğin,test
,build
kaynağından devralır.)
Bu satırların her biri birden fazla kez kullanılabilir ve ilk kelimeden sonra gelen bağımsız değişkenler, tek bir satırda görünmüş gibi birleştirilir. (CVS kullanıcıları, "İsviçre çakısı" komut satırı arayüzüne sahip başka bir araç olan CVS'nin söz diziminin .cvsrc
söz dizimine benzediğini görecektir.) Örneğin, şu satırlar:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
şeklinde birleştirilir:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
Bu nedenle, geçerli işaretler --verbose_failures
ve --test_tmpdir=/tmp/bar
olur.
Seçenek önceliği:
- Komut satırındaki seçenekler her zaman rc dosyalarındaki seçeneklere göre öncelikli olur.
Örneğin, bir rc dosyası
build -c opt
diyorsa ancak komut satırı işareti-c dbg
ise komut satırı işareti öncelikli olur. rc dosyasında öncelik, spesifik olma derecesine göre belirlenir: Daha spesifik bir komutun satırları, daha az spesifik bir komutun satırlarına göre önceliklidir.
Özgüllük, devralma ile tanımlanır. Bazı komutlar, seçenekleri diğer komutlardan devralır. Bu durumda, devralan komut temel komuttan daha spesifik olur. Örneğin,
test
komutubuild
komutundan devralındığı için tümbazel build
işaretleribazel test
için geçerlidir ve aynı seçenek içintest
satırı olmadığı sürece tümbuild
satırlarıbazel test
için de geçerlidir. rc dosyasında şu bilgiler görüntüleniyorsa:test -c dbg --test_env=PATH
build -c opt --verbose_failures
bazel build //foo
,-c opt --verbose_failures
'yi,bazel test //foo
ise--verbose_failures -c dbg --test_env=PATH
'ü kullanır.Devralma (özgüllük) grafiği:
- Her komut
common
öğesinden devralınır. - Aşağıdaki komutlar
build
komutundan devralınır (ve daha spesifiktir):test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
veaquery
coverage
,test
kaynağından devralındı
- Her komut
Aynı komut için eşit özellikteki 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ı izlemeniz okunabilirliği artırır: En ü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 bu da daha sezgiseldir.
Bir rc dosyasının satırında belirtilen bağımsız değişkenler, seçenek olmayan bağımsız değişkenleri (ör. derleme hedeflerinin adları vb.) içerebilir. Bunlar, aynı dosyalarda belirtilen seçenekler gibi, komut satırındaki kardeşlerinden daha düşük önceliğe sahiptir ve her zaman seçenek olmayan bağımsız değişkenlerin açık listesinin başına eklenir.
--config
Seçenek varsayılanlarını ayarlamanın yanı sıra, rc dosyası seçenekleri gruplandırmak ve yaygın gruplandırmalar için kısa bir yol sağlamak amacıyla da kullanılabilir. Bu işlem, komuta :name
sonek eklenerek yapılır. Bu seçenekler varsayılan olarak yoksayılır ancak --config=name
seçeneği komut satırında veya .bazelrc
dosyasında bulunduğunda başka bir yapılandırma tanımının içinde bile yinelemeli olarak dahil edilir. command:name
tarafından belirtilen seçenekler, yalnızca yukarıda açıklanan öncelik sırasına göre geçerli komutlar için genişletilir.
--config=foo
, rc dosyalarında tanımlanan seçenekleri "yerinde" genişletir. Böylece yapılandırma için belirtilen seçenekler, --config=foo
seçeneğinin sahip olduğu önceliğe sahip olur.
Bu söz dizimi, startup
kullanılarak başlangıç seçeneklerinin ayarlanması için geçerli değildir. .bazelrc dosyasındaki startup:config-name --some_startup_option
ayarı yoksayı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
Bazel'in yok saymasını istediğiniz çalışma alanındaki dizinleri (ör. diğer derleme sistemlerini kullanan ilgili projeler) belirtebilirsiniz. Çalışma alanının kök dizinine .bazelignore
adlı bir dosya yerleştirin ve Bazel'in yoksaymasını istediğiniz dizinleri satır başına bir tane olacak şekilde ekleyin. Girişler, çalışma alanının kök dizinine göre belirlenir.
Genel bazelrc dosyası
Bazel, isteğe bağlı bazelrc dosyalarını şu sırayla okur:
- Sistem rc dosyası
etc/bazel.bazelrc
konumunda bulunur. - Çalışma alanı rc dosyası
$workspace/tools/bazel.rc
konumunda bulunuyor. $HOME/.bazelrc
konumunda 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ı da sağlayabilirsiniz.