Bazelrc yapılandırma dosyalarını yazma

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bazel birçok seçeneği kabul eder. Bazı seçenekler sık sık farklılık gösterir (örneğin, --subcommands) bazı derlemelerde aynı kalırken (örneğin, --package_path) tıklayın. Bu değiştirilmeyen seçenekleri her derlemede belirtmekten kaçınmak için (ve diğer komutlar) kullanıyorsanız .bazelrc.

.bazelrc dosyaları nerede?

Bazel, aşağıdaki konumlarda isteğe bağlı yapılandırma dosyaları arar: sırayla bakın. Seçenekler bu sıraya göre yorumlanır. sonraki dosyalardaki seçenekler, bir önceki dosyadaki değeri geçersiz kılabilir ve çatışma ortaya çıkabilir. Bu dosyalardan hangilerinin yükleneceğini kontrol eden tüm seçenekler başlatma seçenekleridir; yani bazel ve önce komut ekleyin (build, test vb.).

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

    Sistem tarafından belirtilen başka bir konum gerekliyse, sistem tarafından Bazel ikili programı, BAZEL_SYSTEM_BAZELRC_PATH değerini geçersiz kılar //src/main/cpp:option_processor Sistem tarafından belirtilen konum, ortam değişkeni referansları içerebilir. ör. Unix'te ${VAR_NAME} veya Windows'da %VAR_NAME%.

  2. --noworkspace_rc yoksa çalışma alanı RC dosyası.

    Yol: Workspace dizininizdeki .bazelrc (ana WORKSPACE dosya) ekleyebilirsiniz.

    Bu dosya mevcut değilse hata olmaz.

  3. --nohome_rc yoksa ana sayfa RC dosyası.

    Yol:

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

    Bu dosya mevcut değilse hata olmaz.

  4. Kullanıcı tarafından belirtilen RC dosyası ( --bazelrc=file

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

    /dev/null, diğer tüm --bazelrc'ların yoksayılacağını belirtir. bir kullanıcı rc dosyası için aramayı devre dışı bırakmak açısından kullanışlıdır inşa eder.

    Ö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, bu isteğe bağlı yapılandırma dosyasına ek olarak global dosyası olarak kaydedebilirsiniz. Daha ayrıntılı bilgi için global bazelrc bölümüne bakın.

.bazelrc söz dizimi ve anlamları

Tüm UNIX "rc" öğeleri gibi .bazelrc dosyası, satır tabanlı bir metin dosyasıdır yardımcı olur. Boş satırlar ve # (yorumlar) ile başlayan satırlar yoksayılır. Her biri satır bir kelime dizisi içerir ve bu kelimeler aynı kuralları olarak tanımlayacağım.

İçe aktarılanlar

import veya try-import ile başlayan satırlar özeldir: yüklemek için bunları kullanın diğer "rc" dosyası olarak da kaydedebilir. Çalışma alanı köküne göre bir yol belirtmek için import %workspace%/path/to/bazelrc yaz.

import ile try-import arasındaki fark, import adlı dosya eksik (veya okunamıyor), ancak try-import için eksik dosyası olarak kaydedebilirsiniz.

İçe aktarma önceliği:

  • İçe aktarılan dosyadaki seçenekler, daha önce belirtilen seçeneklere göre önceliklidir içe aktarma beyanı.
  • İçe aktarma ifadesinden sonra belirtilen seçenekler, içe aktarılan dosyada seçenekleri var.
  • 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 bir satırdaki ilk kelime satırı, bu varsayılanların ne zaman uygulandığını belirtir:

  • startup: Komuttan önce gelen ve açıklanan başlatma seçenekleri bazel help startup_options içinde.
  • common: Destekleyen tüm Bazel komutlarına uygulanması gereken seçenekler gerekir. Bir komut bu şekilde belirtilen bir seçeneği desteklemiyorsa seçeneği, başka bir Bazel komutu için geçerli olduğu sürece yoksayılır. Bunun yalnızca seçenek adları için geçerli olduğunu unutmayın: Geçerli komut kabul ediyorsa belirtilen adı desteklemeyen ancak belirtilen değeri desteklemeyen bir seçenek başarısız olur.
  • always: Tüm Bazel komutları için geçerli seçenekler. Komut size bir seçeneği desteklemesi durumunda başarısız olacaktır.
  • command: Seçeneklerin etkinleştirileceği build veya query gibi Bazel komutu geçerlidir. Bu seçenekler, belirtir. (Örneğin, test, build öğesinden devralır.)

Bu satırların her biri birden çok kez kullanılabilir ve ilk kelime, tek bir satırda görünmüş gibi birleştirilir. (CVS kullanıcıları, "İsviçre bıçağı" bulunan başka bir alet komut satırı arayüzünde söz dizimi .cvsrc ile benzerdir.) Ö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ı build -c opt diyor ancak komut satırı işareti -c dbg için komut satırı işareti öncelikli olur.
  • rc dosyasında, öncelik belirliliğe göre belirlenir: daha fazla belirli komutlar, daha az spesifik olan komutun satırlarına göre önceliklidir.

    Belirginlik, kalıtımla tanımlanır. Bazı komutlar, diğer komutları kullanarak devralınan komutu tabandan daha spesifik hale getirir komutuna ekleyin. Örneğin test, build komutundan devralır. Böylece tüm bazel build işaretleri bazel test için geçerlidir ve tüm build satırları, Aynı seçenek için test satırı yoksa bazel test. Rc dosyanın mesajı:

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

    ardından bazel build //foo -c opt --verbose_failures kullanacak, bazel test //foo ise --verbose_failures -c dbg --test_env=PATH adresini kullanacak.

    Devralma (belirginlik) grafiği şu şekildedir:

    • Her komut common öğesinden devralır
    • Aşağıdaki komutlar şuradan devralınır (ve şundan daha spesifiktir): build: test, run, clean, mobile-install, info, print_action, config, cquery ve aquery
    • coverage, test kaynağından devralır
  • 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 okunabilirlik düzeyi: common seçenekleri üst taraftadır ve en spesifik komutlarla yer alır. Böylece seçeneklerin okunma sırası uygulandıkları sırayla aynıdır. Bu daha sezgiseldir.

Bir rc dosyasının bir satırında belirtilen bağımsız değişkenler, seçenekleri (ör. derleme hedeflerinin adları vb.) değil. Bunlar, örneğin aynı dosyalarda belirtilen seçeneklere kıyasla, eşdüzeylerinden daha düşük önceliğe sahiptir. eklenir ve her zaman açık bir liste olmayan seçenek bağımsız değişkenleridir.

--config

rc dosyası, seçenek varsayılanlarını ayarlamanın yanı sıra seçenekleri gruplandırmak için de kullanılabilir. ve yaygın gruplar için bir kısaltma sunacaktır. Bu işlem, bir :name soneki komuta ekleyin. Bu seçenekler varsayılan olarak yoksayılır, ancak --config=name seçeneği sunulduğunda dahil edilir. veya bir .bazelrc dosyasında yinelemeli olarak, hatta başka bir yapılandırma tanımıdır. command:name tarafından belirtilen seçenekler yalnızca uygun komutlar için yukarıda açıklanan öncelik sırasına göre genişletilir.

--config=foo, şurada tanımlanan seçeneklere genişler: rc dosyaları "yerinde" Böylece seçenekler yapılandırma için belirtilen, --config=foo seçeneği ile aynı önceliğe sahiptir elde etti.

Bu söz dizimi, etiket tanımlamak için startup kullanımını kapsamaz başlangıç seçeneklerini inceleyin. Ayar .bazelrc dosyasındaki startup:config-name --some_startup_option 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çindeki dizinleri belirtebilirsiniz Örneğin, ilgili projeler gibi Bazel'ın göz ardı etmesini başka derleme sistemleri de kullanabilirsiniz. Şu ada sahip dosyayı yerleştirin: Çalışma alanının kökünde .bazelignore var ve Bazel'ın yok saymasını istediğiniz dizinleri, her satırında görünür. 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:

  1. Sistem rc dosyası etc/bazel.bazelrc konumunda bulunuyor.
  2. Workspace rc dosyası $workspace/tools/bazel.rc adresinde.
  3. Ana sayfa rc dosyası $HOME/.bazelrc konumunda bulunuyor

Burada listelenen her bazelrc dosyasının aşağıdakileri yapmak için kullanılabilecek bir işareti vardır: bunları devre dışı bırakma (ör. --nosystem_rc, --noworkspace_rc, --nohome_rc). Şunları yapabilirsiniz: --ignore_all_rc_files başlatma seçeneği sunulur.