Bazelrc yapılandırma dosyalarını yazma

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bazel birçok seçeneği kabul eder. Bazı seçenekler sık sık değişirken (ör. --subcommands) diğerleri birkaç derleme boyunca aynı kalır (ör. --package_path). Değişmeyen bu seçenekleri her derleme için (ve diğer komutlar için) belirtmekten kaçınmak istiyorsanız seçenekleri .bazelrc adlı bir yapılandırma dosyasında belirtebilirsiniz.

.bazelrc dosyaları nerede bulunur?

Bazel, isteğe bağlı yapılandırma dosyalarını aşağıdaki konumlarda ve aşağıda gösterilen sırayla arar. Seçenekler bu sırayla yorumlanır. Bu nedenle, bir çakışma oluşursa sonraki dosyalardaki seçenekler önceki dosyalardaki bir değeri geçersiz kılabilir. Bu dosyalardan hangilerinin yükleneceğini kontrol eden tüm seçenekler başlangıç seçenekleridir. Bu nedenle, bazel'dan sonra ve komuttan (build, test vb.) önce gelmelidir.

  1. --nosystem_rc mevcut olmadığı sürece sistem RC dosyası.

    Yol:

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

    Bu dosya mevcut değilse hata oluşmaz.

    Başka bir sistem tarafından belirtilen konum gerekliyse //src/main/cpp:option_processor içinde BAZEL_SYSTEM_BAZELRC_PATH değerini geçersiz kılarak özel bir Bazel ikilisi oluşturmanız gerekir. Sistem tarafından belirtilen konum, ortam değişkeni referansları içerebilir. Örneğin, Unix'te ${VAR_NAME} veya Windows'da %VAR_NAME%.

  2. --noworkspace_rc mevcut olmadığı sürece çalışma alanı RC dosyası.

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

    Bu dosya mevcut değilse hata oluşmaz.

  3. --nohome_rc mevcut değilse ana RC dosyası.

    Yol:

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

    Bu dosya mevcut değilse hata oluşmaz.

  4. Kullanıcı tarafından belirtilen RC dosyası, --bazelrc=file ile belirtilmişse

    Bu işaret isteğe bağlıdır ancak birden çok kez de belirtilebilir.

    /dev/null, bundan sonraki tüm --bazelrc'lerin yoksayılacağını gösterir. Bu, yayın derlemelerinde olduğu gibi, kullanıcı rc dosyası aramasını devre dışı bırakmak için 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ılıyor.

Bazel, bu isteğe bağlı yapılandırma dosyasına ek olarak genel bir rc dosyası da arar. Daha fazla bilgi için global bazelrc bölümüne bakın.

.bazelrc söz dizimi ve semantik

Tüm UNIX "rc" dosyaları gibi, .bazelrc dosyası da satır tabanlı bir dilbilgisine sahip metin dosyasıdır. Boş satırlar ve # ile başlayan satırlar (yorumlar) yoksayılır. Her satırda, Bourne kabuğuyla aynı kurallara göre belirteçlere ayrılmış bir kelime dizisi bulunur.

İçe aktarılanlar

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 ve try-import arasındaki fark, import ile oluşturulan dosya eksikse (veya okunamıyorsa) Bazel'in başarısız olmasıdır. Ancak try-import ile oluşturulan dosya için bu durum geçerli 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ı

Bir bazelrc dosyasındaki çoğu satır, varsayılan seçenek değerlerini tanımlar. Her satırdaki ilk kelime, bu varsayılanların ne zaman uygulandığını belirtir:

  • startup: Komuttan önce gelen ve bazel help startup_options bölümünde açıklanan başlangıç seçenekleri.
  • common: Kendilerini destekleyen tüm Bazel komutlarına uygulanması gereken seçenekler. Bir komut, bu şekilde belirtilen bir seçeneği desteklemiyorsa seçenek, bazı diğer Bazel komutları için geçerli olduğu sürece yoksayılır. Bu durumun yalnızca seçenek adları için geçerli olduğunu unutmayın: Geçerli komut, belirtilen ada sahip bir seçeneği kabul ediyorsa ancak belirtilen değeri desteklemiyorsa 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 başarısız olur.
  • command: Seçeneklerin uygulandığı build veya query gibi Bazel komutu. Bu seçenekler, belirtilen komuttan devralınan tüm komutlar için de geçerlidir. (Örneğin, test, build kaynağından devralır.)

Bu satırların her biri birden fazla kez kullanılabilir ve ilk kelimeden sonra gelen bağımsız değişkenler, tek bir satırda görünmüş gibi birleştirilir. (CVS kullanıcıları, "İsviçre çakısı" komut satırı arayüzüne sahip başka bir araç olan CVS'nin söz diziminin .cvsrc söz dizimine benzediğini görecektir.) Örneğin, şu satırlar:

build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar

şeklinde birleştirilir:

build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar

Bu nedenle, geçerli işaretler --verbose_failures ve --test_tmpdir=/tmp/bar olur.

Seçenek önceliği:

  • Komut satırındaki seçenekler her zaman rc dosyalarındaki seçeneklere göre öncelikli olur. Örneğin, bir rc dosyası build -c opt diyorsa ancak komut satırı işareti -c dbg ise komut satırı işareti öncelikli olur.
  • rc dosyasında öncelik, spesifik olma derecesine göre belirlenir: Daha spesifik bir komutun satırları, daha az spesifik bir komutun satırlarına göre önceliklidir.

    Özgüllük, devralma ile tanımlanır. Bazı komutlar, seçenekleri diğer komutlardan devralır. Bu durumda, devralan komut temel komuttan daha spesifik olur. Örneğin, test komutu build komutundan devralındığı için tüm bazel build işaretleri bazel test için geçerlidir ve aynı seçenek için test satırı olmadığı sürece tüm build satırları bazel test için de geçerlidir. rc dosyasında şu bilgiler görüntüleniyorsa:

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

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

    Devralma (özgüllük) grafiği:

    • Her komut common öğesinden devralınır.
    • Aşağıdaki komutlar build komutundan devralınır (ve daha spesifiktir): test, run, clean, mobile-install, info, print_action, config, cquery ve aquery
    • coverage, test kaynağından devralındı
  • Aynı komut için eşit özellikteki 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ı izlemeniz okunabilirliği artırır: 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 bu da daha sezgiseldir.

Bir rc dosyasının satırında belirtilen bağımsız değişkenler, seçenek olmayan bağımsız değişkenleri (ör. derleme hedeflerinin adları vb.) içerebilir. Bunlar, aynı dosyalarda belirtilen seçenekler gibi, komut satırındaki kardeşlerinden 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

Seçenek varsayılanlarını ayarlamanın yanı sıra, rc dosyası seçenekleri gruplandırmak ve yaygın gruplandırmalar için kısa bir yol sağlamak amacıyla da kullanılabilir. Bu işlem, komuta :name sonek eklenerek yapılır. Bu seçenekler varsayılan olarak yoksayılır ancak --config=name seçeneği komut satırında veya .bazelrc dosyasında bulunduğunda başka bir yapılandırma tanımının içinde bile yinelemeli olarak dahil edilir. command:name tarafından belirtilen seçenekler, yalnızca yukarıda açıklanan öncelik sırasına göre geçerli komutlar için genişletilir.

--config=foo, rc dosyalarında tanımlanan seçenekleri "yerinde" genişletir. Böylece yapılandırma için belirtilen seçenekler, --config=foo seçeneğinin sahip olduğu önceliğe sahip olur.

Bu söz dizimi, startup kullanılarak başlangıç seçeneklerinin ayarlanması için geçerli değildir. .bazelrc dosyasındaki startup:config-name --some_startup_option ayarı yoksayılır.

Ö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ındaki 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'in yoksaymasını istediğiniz dizinleri satır başına bir tane olacak şekilde ekleyin. Girişler, çalışma alanının kök dizinine göre belirlenir.

Genel bazelrc dosyası

Bazel, isteğe bağlı bazelrc dosyalarını şu sırayla okur:

  1. Sistem rc dosyası etc/bazel.bazelrc konumunda bulunur.
  2. Çalışma alanı rc dosyası $workspace/tools/bazel.rc konumunda bulunuyor.
  3. $HOME/.bazelrc konumunda bulunan 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ı da sağlayabilirsiniz.