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_rcmevcut değilse 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 gerekiyorsa
//src/main/cpp:option_processoriçindekiBAZEL_SYSTEM_BAZELRC_PATHdeğerini geçersiz kılarak özel bir Bazel ikili dosyası 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_rcyoksa çalışma alanı RC dosyası.Yol: Çalışma alanı dizininizdeki
.bazelrc(anaMODULE.bazeldosyasının yanında).Bu dosya mevcut değilse hata oluşmaz.
--nohome_rcyoksa ana RC dosyası.Yol:
- Linux/macOS/Unix'te:
$HOME/.bazelrc - Windows'ta: Varsa
%USERPROFILE%\.bazelrcveya%HOME%/.bazelrc
Bu dosya mevcut değilse hata oluşmaz.
- Linux/macOS/Unix'te:
--bazelrc=fileile belirtilmişse kullanıcı tarafından belirtilen RC dosyasıBu işaret isteğe bağlıdır ancak birden çok kez de belirtilebilir.
/dev/null, sonraki tüm--bazelrcdeğerlerinin yoksayıldığını gösterir. Bu, kullanıcı rc dosyasının aranmasını devre dışı bırakmak için kullanışlıdır (ör. sürüm derlemelerinde).Örneğin:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rcx.rcvey.rcokunur.- Önceki
/dev/nullnedeniylez.rcyoksayılır.
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 semantiği
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ğu ile 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 ile try-import arasındaki fark, import dosyası eksikse (veya okunamıyorsa) Bazel'in başarısız olmasıdır. try-import dosyası için bu durum geçerli değildir.
İç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_optionsbölümünde açıklanan başlangıç seçenekleri.common: Desteklenen tüm Bazel komutlarına uygulanacak seçenekler. Bir komut bu şekilde belirtilen bir seçeneği desteklemiyorsa bazı diğer Bazel komutları için geçerli olduğu sürece bu seçenek yok sayılır. Bunun yalnızca seçenek adları için geçerli olduğunu unutmayın: Mevcut 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 olan seçenekler. Bir komut bu şekilde belirtilen bir seçeneği desteklemiyorsa komut başarısız olur.command: Seçeneklerin geçerli olduğu Bazel komutu (ör.buildveyaquery). Bu seçenekler, belirtilen komuttan devralınan tüm komutlar için de geçerlidir. (Örneğin,test,build'ten devralını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_failuresbuild --test_tmpdir=/tmp/bar
aşağıdaki şekilde birleştirilir:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/barBu 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 optyazıyorsa ancak komut satırı işareti-c dbgise 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 komutlardan seçenekleri devralır. Bu sayede devralan komut, temel komuttan daha spesifik olur. Örneğin,
test,buildkomutundan devralınır. Bu nedenle, tümbazel buildişaretleribazel testiçin geçerlidir ve aynı seçenek için birtestsatırı olmadığı sürece tümbuildsatırlarıbazel testiçin de geçerlidir. rc dosyasında şu bilgiler yer alıyorsa:test -c dbg --test_env=PATHbuild -c opt --verbose_failuresbazel build //foo,-c opt --verbose_failures'u,bazel test //fooise--verbose_failures -c dbg --test_env=PATH'ı kullanır.Devralınma (özellik) grafiği:
- Her komut
commonsınıfından devralır - Aşağıdaki komutlar
build'ten devralınır (vebuild'ten daha spesifiktir):test,run,clean,mobile-install,info,print_action,config,cqueryveaquery coverage,fetchvevendor,test'ten devralır
- 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 etmeniz okunabilirliği artırır: Üstte
commonseç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 kısaltma sağlamak için de kullanılabilir. Bu işlem, komuta :name ekleyerek yapılır. Bu seçenekler varsayılan olarak yoksayılır ancak --config=name seçeneği komut satırında veya bir .bazelrc dosyasında mevcut olduğunda, başka bir yapılandırma tanımı içinde bile yinelemeli olarak 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ında startup:config-name --some_startup_option ayarı yoksayılır.
--enable_platform_specific_config
.bazelrc içindeki platforma özgü yapılandırmalar, --enable_platform_specific_config kullanılarak otomatik olarak etkinleştirilebilir. Örneğin, ana makine işletim sistemi Linux ise ve build komutu çalıştırılırsa build:linux yapılandırması otomatik olarak etkinleştirilir. Desteklenen işletim sistemi tanımlayıcıları linux, macos, windows, freebsd ve openbsd'dir. Bu işaretin etkinleştirilmesi, Linux'ta --config=linux, Windows'ta --config=windows vb. kullanmaya eşdeğerdir.
--enable_platform_specific_config parametresine bakın.
Ö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ı dizinlerini (ör. diğer derleme sistemlerini kullanan ilgili projeler) 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öredir.
Global bazelrc dosyası
Bazel, isteğe bağlı bazelrc dosyalarını şu sırayla okur:
etc/bazel.bazelrcadresindeki sistem rc dosyası.$workspace/tools/bazel.rcadresindeki çalışma alanı rc dosyası.$HOME/.bazelrcadresindeki 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.