Bazelrc yapılandırma dosyalarını yazma

Bazel birçok seçenek kabul eder. Bazı seçenekler sıklıkla farklılık gösterir (ör. --subcommands), diğerleri birkaç derlemede (--package_path gibi) aynı kalır. Her derlemede (ve diğer komutlarda) değişmeden bu seçenekleri belirtmekten kaçınmak için, seçenekleri bir yapılandırma dosyasında .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, çakışma olması durumunda sonraki dosyalardaki seçenekler önceki dosyalardan alınan 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 seçeneğinden sonra ve komuttan (build, test vb.) önce gelmeleri gerekir.

  1. --nosystem_rc yoksa sistem RC dosyası.

    Yol:

    • Linux/macOS/Unix'lerde: /etc/bazel.bazelrc
    • Windows'da: %ProgramData%\bazel.bazelrc

    Bu dosya mevcut değilse bu bir 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'te ${VAR_NAME} veya Windows'da %VAR_NAME% gibi ortam değişkeni referansları içerebilir.

  2. --noworkspace_rc yoksa workspace RC dosyası.

    Yol: Çalışma alanı dizininizdeki .bazelrc (ana WORKSPACE dosyasının yanında).

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

  3. --nohome_rc yoksa ev RC dosyası.

    Yol:

    • Linux/macOS/Unix'lerde: $HOME/.bazelrc
    • Windows'da: Varsa %USERPROFILE%\.bazelrc veya %HOME%/.bazelrc

    Bu dosya mevcut değilse bu bir 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 de 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ı.

Bu isteğe bağlı yapılandırma dosyasına ek olarak, Bazel bir global rc dosyası arar. Daha fazla bilgi için global pazar bölümünü inceleyin.

.bazelrc söz dizimi ve anlamlar

Tüm UNIX "rc" dosyaları gibi .bazelrc dosyası da satır tabanlı dil bilgisi 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: Diğer "rc" dosyalarını yüklemek için bunları kullanın. Çalışma alanı köküyle göreli bir yol belirtmek için import %workspace%/path/to/bazelrc yazın.

import ile try-import arasındaki fark, Bazel'in import dosyasının eksik olması (veya okunamaması) durumunda başarısız olması, ancak try-import içeren bir dosya için bu işlemi gerçekleştirmemesidir.

İç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'in ç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: Tüm Bazel komutları için geçerli olan seçenekler.
  • command: Seçeneklerin geçerli olduğu build veya query 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 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'yi kullananlar, .cvsrc söz dizimine benzer bir kelime bulacaklar.) Ö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'dir.

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 yazıyorsa 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 spesifik 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 komutlardan seçenekleri devralır. Bu da devralan komutu temel komuttan daha spesifik hale getirir. Örneğin, test, build komutundan devralır. Bu nedenle, aynı seçenek için test satırı olmadığı sürece tüm bazel build işaretleri bazel test için geçerli olur ve tüm build satırları bazel test için de geçerli olur. RSK dosyası şöyleyse:

    test -c dbg --test_env=PATH
    build -c opt --verbose_failures
    

    ardından 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 şuralardan devralınır (ve daha spesifiktir): build: 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 elde edilir: Üst kısımdaki common seçenekleriyle başlayın ve en belirgin komutlarla dosyanın alt kısmındaki sona erdirin. Bu şekilde, seçeneklerin okunma sırası, uygulandıkları sıra ile aynı olur. Bu da daha sezgisel bir yöntemdir.

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çeneklerde olduğu gibi, komut satırında eşdüzey öğelerine 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

Crc dosyası, seçenek varsayılanlarını ayarlamaya ek olarak, seçenekleri gruplandırmak ve yaygın gruplamalar için bir kestirme sağlamak için de kullanılabilir. Bu işlem, komuta bir :name son eki eklenerek yapılır. Bu seçenekler varsayılan olarak yoksayılır ancak başka bir yapılandırma tanımının içinde bile, tekrarlı olarak komut satırında veya bir .bazelrc dosyasında --config=name seçeneği mevcut olduğunda 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şletilir.

Bu söz dizimi, başlangıç seçeneklerini ayarlamak için startup özelliğinin kullanımını kapsamaz. .bazelrc dosyasındaki startup:config-name --some_startup_option ayarları yoksayılır.

Örnek

Örnek bir ~/.bazelrc dosyası aşağıda 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'ı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, çalışma alanı köküyle görelidir.

Global bazelrc dosyası

Bazel, isteğe bağlı Bazelrc dosyalarını şu sırayla okur: - Sistem rc dosyası: etc/bazel.bazelrc. - $workspace/tools/bazel.rc konumunda bulunan Workspace rc dosyası. - Ana sayfa rc dosyası $HOME/.bazelrc adresinde yerelleştirildi

Burada listelenen her bazelrc dosyasının devre dışı bırakılması için kullanılabilecek karşılık gelen bir işareti vardır (ör. --nosystem_rc, --noworkspace_rc, --nohome_rc). Ayrıca --ignore_all_rc_files başlatma seçeneğini ileterek Bazel'in tüm bazelrc'leri yoksaymasını sağlayabilirsiniz.