Bazel birçok seçenek kabul eder. Bazı seçenekler sıklıkla farklılık gösterir (ör. --subcommands
), bazıları ise birkaç derlemede aynı kalır (ör. --package_path
). Her derlemede (ve diğer komutlarda) değişmeyen bu seçenekleri belirtmekten kaçınmak için 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ıraya göre yorumlanır. Böylece sonraki dosyalarda yer alan seçenekler, çakışma olması durumunda önceki bir dosyadaki değeri geçersiz kılabilir. Bu dosyalardan hangilerinin yükleneceğini kontrol eden tüm seçenekler başlangıç seçenekleridir. Yani başlangıç seçenekleri, bazel
sonrasında ve komuttan (build
, test
vb.) önce gelmelidir.
--nosystem_rc
mevcut değilse sistem RC dosyası.Yol:
- Linux/macOS/Unixes'te:
/etc/bazel.bazelrc
- Windows'da:
%ProgramData%\bazel.bazelrc
Bu dosya mevcut değilse bu durum hata değildir.
Sistem tarafından belirtilen başka bir konum gerekirse
//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'de${VAR_NAME}
veya Windows'da%VAR_NAME%
gibi ortam değişkeni referansları içerebilir.- Linux/macOS/Unixes'te:
--noworkspace_rc
mevcut değilse workspace RC dosyası.Yol: Workspace dizininizdeki
.bazelrc
(anaWORKSPACE
dosyasının yanında).Bu dosya mevcut değilse bu durum hata değildir.
--nohome_rc
mevcut değilse ev RC dosyası.Yol:
- Linux/macOS/Unixes'te:
$HOME/.bazelrc
- Windows'da: Varsa
%USERPROFILE%\.bazelrc
veya%HOME%/.bazelrc
Bu dosya mevcut değilse bu durum hata değildir.
- 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
öğelerinin yoksayılacağını belirtir. Bu, sürüm derlemelerinde olduğu gibi kullanıcı rc dosyası aramasını devre dışı bırakmak için yararlı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, isteğe bağlı bu yapılandırma dosyasına ek olarak global bir rc dosyası arar. Daha fazla bilgi için global bazelrc bölümünü inceleyin.
.bazelrc
söz dizimi ve anlam
Tüm UNIX "rc" dosyaları gibi .bazelrc
dosyası da satır tabanlı dilbilgisi içeren bir metin dosyasıdır. Boş satırlar ve #
(yorumlar) ile başlayan satırlar yoksayılır. Her satır, Bourne kabuğuyla aynı kurallara göre tokenlere ayrılan bir kelime dizisi içerir.
İçe Aktarımlar
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
ile try-import
arasındaki fark, Bazel'ın import
dosyasının eksik olması (veya okunamaması) durumunda başarısız olmasıdır. Ancak try-import
dosyası için bu hatanın yaşanmamasıdır.
İç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 uygulanacağını belirtir:
startup
: Komutun önüne geçen vebazel help startup_options
bölümünde açıklanan başlatma seçenekleri.common
: Bunları destekleyen tüm Bazel komutlarına uygulanması gereken seçeneklerdir. Bir komut bu şekilde belirtilen bir seçeneği desteklemiyorsa bazı Bazel komutu için geçerli olduğu sürece 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 başarısız olur.always
: Tüm Bazel komutlarına uygulanan seçeneklerdir. Bir komut bu şekilde belirtilen bir seçeneği desteklemezse başarısız olur.command
: Seçeneklerin uygulandığıbuild
veyaquery
gibi Bazel komutu. Bu seçenekler, belirtilen komuttan devralan tüm komutlar için de geçerlidir. (Örneğin,test
parametresibuild
öğ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ırdaymış gibi birleştirilir. ("İsviçre bıçağı" komut satırı arayüzüne sahip başka bir araç olan CVS kullanıcıları, söz diziminin .cvsrc
kelimesine benzer olduğunu görür.) Örneğin, aşağıdaki 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
.
Seçenek önceliği:
- Komut satırındaki seçenekler her zaman rc dosyalarındaki seçeneklere göre ö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ında öncelik belirliliğe göre belirlenir: Daha özel bir komutun satırları, daha az spesifik bir komutun satırlarına göre önceliklidir.
Belirlilik, kalıtımla tanımlanır. Bazı komutlar, diğer komutlardan seçenekler devraldığından devralan komut, temel komuttan daha spesifik hale gelir. Örneğin
test
, değeribuild
komutundan devraldığından tümbazel build
işaretleribazel test
için geçerlidir ve aynı seçenek içintest
satırı yoksa tümbuild
satırlarıbazel test
için de geçerli olur. Rc dosyası şunu söylerse:test -c dbg --test_env=PATH
build -c opt --verbose_failures
daha sonra
bazel build //foo
-c opt --verbose_failures
,bazel test //foo
ise--verbose_failures -c dbg --test_env=PATH
kullanır.Devralma (spesifiklik) grafiği:
- Her komut
common
öğesinden devralır - Aşağıdaki komutlar
build
öğesinden devralır (ve daha spesifiktir):test
,run
,clean
,mobile-install
,info
,print_action
,config
,cquery
veaquery
coverage
,test
adlı kuruluş biriminden devralır
- Her komut
Aynı komuta ilişkin seçenekleri eşit derecede belirlilikte belirten iki satır, dosyada göründükleri sıraya göre ayrıştırılır.
Bu öncelik kuralı, dosya sırasıyla eşleşmediğinden rc dosyalarındaki öncelik sırasını izlediğinizde okunabilirlik yardımcı olur: Üst kısımda
common
seçenekleriyle başlayın ve dosyanın en altındaki en özel komutlarla bitirin. Bu şekilde, seçeneklerin okunma sırası uygulandıkları sıra ile aynıdır ve bu da daha sezgiseldir.
Bir rc dosyasının 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ında eşdüzeylerine göre 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
rc dosyası, seçenek varsayılanlarını ayarlamaya ek olarak, seçenekleri gruplandırmak ve ortak gruplamalar için bir kısayol sağlamak da kullanılabilir. Bu işlem, komuta bir :name
son eki eklenerek yapılır. Bu seçenekler varsayılan olarak yok sayılır ancak --config=name
seçeneği mevcut olduğunda komut satırında veya .bazelrc
dosyasında, yinelemeli olarak başka bir yapılandırma tanımının içinde 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ğiyle aynı önceliğe sahip olması amacıyla 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 içinde startup:config-name --some_startup_option
ayarlaması yok sayılacak.
--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
. Bu işareti etkinleştirmek, Linux'ta --config=linux
, Windows'da --config=windows
ve benzeri cihazlarda kullanmaya eş değerdir.
--enable_platform_specific_config sayfasına göz atın.
Örnek
Örnek bir ~/.bazelrc
dosyası:
# 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'ın davranışını yöneten diğer dosyalar
.bazelignore
Çalışma alanında Bazel'ın yoksaymasını istediğiniz 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'ın yoksaymasını istediğiniz dizinleri her satıra bir tane gelecek şekilde ekleyin. Girişler, Workspace köküne göre belirlenir.
Global bazelrc dosyası
Bazel, isteğe bağlı bazelrc dosyalarını şu sırayla okur:
- Sistem rc dosyası
etc/bazel.bazelrc
adresinde bulundu. $workspace/tools/bazel.rc
konumunda bulunan Workspace rc dosyası.$HOME/.bazelrc
konumunda bulunan Home rc dosyası
Burada listelenen her bir bazelrc dosyasının devre dışı bırakılması 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'leri yoksaymasını sağlayabilirsiniz.