Bazelrc yapılandırma dosyalarını yazma

Sorun bildir Kaynağı göster

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.

  1. --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çindeki BAZEL_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.

  2. --noworkspace_rc mevcut değilse workspace RC dosyası.

    Yol: Workspace dizininizdeki .bazelrc (ana WORKSPACE dosyasının yanında).

    Bu dosya mevcut değilse bu durum hata değildir.

  3. --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.

  4. --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 ve y.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 ve bazel 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 veya query gibi Bazel komutu. Bu seçenekler, belirtilen komuttan devralan tüm komutlar için de geçerlidir. (Örneğin, test parametresi 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ı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ğeri build komutundan devraldığından tüm bazel build işaretleri bazel test için geçerlidir ve aynı seçenek için test satırı yoksa tüm build 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 ve aquery
    • coverage, test adlı kuruluş biriminden devralır
  • 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:

  1. Sistem rc dosyası etc/bazel.bazelrc adresinde bulundu.
  2. $workspace/tools/bazel.rc konumunda bulunan Workspace rc dosyası.
  3. $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.