Bazelrc yapılandırma dosyalarını yazma

Sorun bildir Kaynağı görüntüleyin Nightly · 7.4 . 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 değişiklik gösterir (örneğin, --subcommands), bazıları birden fazla derlemede (ör. --package_path) aynı kalır. Değiştirilmeyen bu seçenekleri her derleme (ve diğer komutlar) için belirtmekten kaçınmak için .bazelrc adlı bir yapılandırma dosyasında seçenekleri 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. Diğer bir deyişle, bunların bazel sonrasında ve komuttan (build, test vb.) önce yapılması gerekir.

  1. --nosystem_rc mevcut değilse sistem RC dosyası.

    Yol:

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

    Bu dosya mevcut değilse hata olmaz.

    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: Çalışma alanı dizininizdeki .bazelrc (ana MODULE.bazel dosyasının yanında).

    Bu dosya mevcut değilse hata olmaz.

  3. --nohome_rc yoksa ana RC dosyası.

    Yol:

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

    Bu dosya mevcut değilse hata olmaz.

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

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

    /dev/null, sonraki tüm --bazelrc'ların yoksayılacağı anlamına gelir. Bu, kullanıcı rc dosyasının aranmasını devre dışı bırakmak için kullanışlıdır (ör. sürüm derlemelerinde).

    Örneğin:

    --bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
    
    • x.rc ve y.rc okunur.
    • Önceki /dev/null nedeniyle z.rc yoksayılır.

Bazel, bu isteğe bağlı yapılandırma dosyasına ek olarak genel bir rc dosyası 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ı bir dil bilgisine sahip bir metin dosyasıdır. Boş satırlar ve # ile başlayan satırlar (yorumlar) yok sayılır. Her satır, Bourne kabuğuyla aynı kurallara göre parçalara ayrılmış 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 göre bir yol belirtmek için import %workspace%/path/to/bazelrc yazın.

import ve try-import arasındaki fark, import ile biten dosya eksikse (veya okunamıyorsa) Bazel'in başarısız olması, try-import ile biten dosya için ise başarısız olmamasıdır.

İçe aktarma önceliği:

  • İçe aktarılan dosyanın seçenekleri, içe aktarma ifadesi öncesinde 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: Komutun önüne gelen ve bazel help startup_options bölümünde açıklanan başlangıç 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 başarısız olur.
  • command: Seçeneklerin geçerli olduğu 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'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 çakısı" komut satırı arayüzüne sahip başka bir araç olan CVS kullanıcıları, söz dizimi .cvsrc'e benzer bir yapıda bulur.) Örneğin, şu satırlar:

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

aşağıdaki gibi 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.

    Belirlilik, devralma ile 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ı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 şu bilgiler yer alıyorsa:

    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'ten devralır
    • Aşağıdaki komutlar build kaynağından devralınır (ve ondan daha spesifiktir): test, run, clean, mobile-install, info, print_action, config, cquery ve aquery
    • coverage, fetch ve vendor, test'ten 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ırasıyla eşleşmediğinden, rc dosyalarında öncelik sırasını takip etmek okunabilirliği artırır: Ü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 satırında belirtilen bağımsız değişkenler, seçenek olmayan bağımsız değişkenler (ör. derleme hedeflerinin adları) içerebilir. Aynı dosyalarda belirtilen seçenekler gibi bunlar da komut satırındaki kardeşlerine göre daha düşük önceliğe sahiptir ve her zaman seçenek olmayan bağımsız değişkenlerin açık listesine eklenir.

--config

rc dosyası, seçenek varsayılanlarını ayarlamaya ek olarak seçenekleri gruplandırmak ve yaygın gruplandırmalar için kısaltma sağlamak için 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 komut satırında veya bir .bazelrc dosyasında mevcut olduğunda, başka bir yapılandırma tanımı içinde bile yinelemeli olarak dahil edilir. command:name ile 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ğ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.

--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'dir. Bu işaretin etkinleştirilmesi Linux'ta --config=linux, Windows'da --config=windows ve benzeri uygulamalarda kullanılmasıyla eşdeğerdir.

--enable_platform_specific_config parametresine bakın.

Ö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ı dizinlerini (ör. diğer derleme sistemlerini kullanan ilgili projeler) belirtebilirsiniz. Çalışma alanının kök konumuna .bazelignore adlı bir dosya yerleştirin ve Bazel'in yoksaymasını istediğiniz dizinleri her satıra bir tane gelecek ş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:

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