Bazelrc yapılandırma dosyalarını yazma

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 .

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, aşağıda gösterilen sırayla aşağıdaki konumlarda isteğe bağlı yapılandırma dosyalarını 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.

  1. --nosystem_rc yoksa sistem RC dosyası.

    Yol:

    • Linux/macOS/Unixes'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_processor içindeki BAZEL_SYSTEM_BAZELRC_PATH değ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'da %VAR_NAME% gibi ortam değişkeni referansları içerebilir.

  2. --noworkspace_rc mevcut değilse çalışma alanı RC dosyası.

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

    Bu dosya mevcut değilse hata oluşmaz.

  3. --nohome_rc yoksa ana RC dosyası.

    Yol:

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

    Bu dosya mevcut değilse hata oluşmaz.

  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'ların yoksayılacağını belirtir. Bu, sürüm derlemeleri gibi bir kullanıcı rc dosyası için arama özelliğinin devre dışı bırakılması açısından kullanışlıdır.

    Örneğin:

    --bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
    
    • x.rc ve y.rc okunur.
    • z.rc, önceki /dev/null nedeniyle yoksayıldı.

Bazel, bu isteğe bağlı yapılandırma dosyasına ek olarak global bir rc dosyası da 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ı dilbilgisi içeren bir metin dosyasıdır. # ile başlayan boş satırlar ve satırlar (yorumlar) yoksayılır. Her satır, Bourne kabuğuyla aynı kurallara göre belirlenen 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 bağlı bir yol belirtmek için import %workspace%/path/to/bazelrc yazın.

import ile try-import arasındaki fark, import'deki dosya eksik olduğunda (veya okunamadığında) Bazel'in başarısız olmasıdır. Ancak try-import'lı bir dosya için bu durum söz konusu 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ı

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: Komuttan önce gelen ve bazel help startup_options bölümünde açıklanan başlatma 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 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. build veya query). 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 çok 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 bıçağı" komut satırı arayüzüne sahip başka bir araç olan CVS kullanıcıları, .cvsrc ile benzer bir söz dizimi bulur.) Ö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 şeklindedir.

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 opt yazıyorsa ancak komut satırı işareti -c dbg ise komut satırı işareti önceliklidir.
  • rc dosyası içinde öncelik, belirginliğe göre belirlenir: Daha özel 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 komutların seçeneklerini devralır. Bu da devralınan komutu temel komuttan daha ayrıntılı hale getirir. Örneğin, test, build komutundan devralınır. Bu nedenle, tüm bazel build işaretleri bazel test için geçerlidir ve aynı seçenek için bir test satırı olmadığı sürece tüm build satırları bazel test için de geçerlidir. RC dosyasında şöyle bir şey olursa:

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

    bazel build //foo, -c opt --verbose_failures'u, bazel test //foo ise --verbose_failures -c dbg --test_env=PATH'ı kullanır.

    Devralınma (özellik) grafiği:

    • Her komut common'ten devralır
    • Şu komutlar build öğesinden devralınır (ve daha spesifiktir): test, run, clean, mobile-install, info, print_action, config, cquery ve aquery
    • coverage, test adlı kuruluş biriminden devralındı
  • Aynı komut için seçenekleri eşit belirginlikte belirten iki satır, dosyada göründükleri sıraya göre ayrıştırılır.

  • Bu öncelik kuralı, dosya sıralamasıyla eşleşmediğinden, rc dosyalarındaki öncelik sırasını izlerseniz okunabilirliğe yardımcı olur: 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 daha sezgisel bir deneyim sağlanır.

Bir rc dosyasının bir 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ındaki eşdüzeylerinden daha düşük önceliğe sahiptir ve her zaman isteğe bağlı olmayan bağımsız değişkenler listesinin başına eklenir.

--config

rc dosyası, seçenek varsayılanlarını ayarlamaya ek olarak seçenekleri gruplandırmak ve yaygın gruplandırmalar için bir kısaltma sunmak 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 varsa komut satırında veya .bazelrc dosyasında, yinelemeli olarak, hatta başka bir yapılandırma tanımının içinde olsa bile dahil edilir. command:name tarafından belirtilen seçenekler, yukarıda açıklanan öncelik sırasına göre yalnızca geçerli komutlar için genişletilir.

--config=foo, yapılandırma için belirtilen seçeneklerin --config=foo seçeneğinin sahip olduğu önceliğe sahip olacak şekilde rc dosyalarında "yerinde" tanımlanan seçeneklere genişler.

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.

Örnek

Aşağıda örnek bir ~/.bazelrc dosyası 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

Çalışma alanı içinde, başka derleme sistemlerini kullanan ilgili projeler gibi Bazel'ın yoksaymasını istediğiniz dizinleri 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öre değişir.

Global bazelrc dosyası

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

Burada listelenen her bazelrc dosyası, devre dışı bırakmak için kullanılabilecek bir işarete sahiptir (ö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.