Komutlar ve Seçenekler

Sorun bildir Kaynağı göster

Bu sayfada bazel build, bazel run ve bazel test gibi çeşitli Bazel komutlarıyla kullanılabilen seçenekler ele alınmaktadır. Bu sayfa, Build with Bazel'daki Bazel komutları listesinin tamamlayıcısıdır.

Hedef söz dizimi

build veya test gibi bazı komutlar, bir hedef listesi üzerinde çalışabilir. Bunlar, Derlenecek hedefleri belirleme bölümünde açıklanan etiketlerden daha esnek bir söz dizimi kullanır.

Seçenekler

Aşağıdaki bölümlerde, derleme sırasında kullanılabilen seçenekler açıklanmaktadır. Yardım komutunda --long kullanıldığında, çevrimiçi yardım mesajları her seçeneğin anlamı, türü ve varsayılan değeri hakkında özet bilgiler sağlar.

Çoğu seçenek yalnızca bir kez belirtilebilir. Birden çok kez belirtildiğinde son örnek kazanır. Birden çok kez belirtilebilen seçenekler, çevrimiçi yardımda "birden fazla kez kullanılabilir" metniyle belirtilir.

Paket konumu

--package_path

Bu seçenek, belirli bir pakete ait BUILD dosyasını bulmak için aranan dizin kümesini belirtir.

Bazel, paket yolu araması yaparak paketlerini bulur. Bu, her biri kısmi kaynak ağacının kökü olan, iki nokta üst üste işaretiyle ayrılmış sıralı bir bazel dizin listesidir.

--package_path seçeneğini kullanarak özel bir paket yolu belirtmek için:

  % bazel build --package_path %workspace%:/some/other/root

Paket yolu öğeleri üç biçimde belirtilebilir:

  1. İlk karakter / ise yol mutlaktır.
  2. %workspace% ile başlarsa yol, en yakın Bazel dizinine göre belirlenir. Örneğin, çalışma dizininiz /home/bob/clients/bob_client/bazel/foo ise paket yolundaki %workspace% dizesi /home/bob/clients/bob_client/bazel olarak genişletilir.
  3. Diğer her şey çalışma dizinine göre alınır. Yapmak istediğiniz şey genellikle bu değildir ve Bazel çalışma alanının altındaki dizinlerden Bazel kullanırsanız beklenmedik şekilde davranabilir. Örneğin, . paket yolu öğesini kullanır ve ardından /home/bob/clients/bob_client/bazel/foo dizinine cd kullanırsanız paketler /home/bob/clients/bob_client/bazel/foo dizininden çözümlenir.

Varsayılan olmayan bir paket yolu kullanıyorsanız kolaylık olması için bunu Bazel yapılandırma dosyanızda belirtin.

Bazel, herhangi bir paketin geçerli dizinde olmasını gerektirmez. Böylece gerekli tüm paketlerin paket yolunda başka bir yerde bulunması durumunda, boş bir bazel çalışma alanından derleme yapabilirsiniz.

Örnek: Boş bir istemciden derleme

  % mkdir -p foo/bazel
  % cd foo/bazel
  % touch WORKSPACE
  % bazel build --package_path /some/other/path //foo

--deleted_packages

Bu seçenek, Bazel'ın silinmiş olarak kabul etmesi ve paket yolundaki herhangi bir dizinden yüklemeyi denememesi gereken paketlerin virgülle ayrılmış listesini belirtir. Bu özellik, paketleri gerçekten silmeden, silme işlemini simüle etmek için kullanılabilir. Bu seçenek birden çok kez geçirilebilir. Bu durumda, tek tek listeler birleştirilir.

Hata kontrolü

Bu seçenekler, Bazel'ın hata kontrolü ve/veya uyarılarını kontrol eder.

--[no]check_visibility

Bu seçenek false (yanlış) değerine ayarlanırsa görünürlük kontrolleri uyarı düzeyine düşürülür. Bu seçeneğin varsayılan değeri true değeridir. Böylece görünürlük kontrolü varsayılan olarak yapılır.

--output_filter=regex

--output_filter seçeneği, yalnızca normal ifadeyle eşleşen hedefler için derleme ve derleme uyarılarını gösterir. Bir hedef, belirtilen normal ifadeyle eşleşmiyorsa ve yürütülmesi başarılı olursa standart çıkışı ve standart hatası silinir.

Aşağıda, bu seçenek için bazı genel değerler verilmiştir:

`--output_filter='^//(first/project|second/project):'` Belirtilen paketlerin çıkışını gösterir.
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` Belirtilen paketler için çıkış gösterme.
`--output_filter=` Her şeyi göster.
`--output_filter=DONT_MATCH_ANYTHING` Hiçbir şey gösterme.

Araç işaretleri

Bu seçenekler, Bazel'ın diğer araçlara hangi seçenekleri ileteceğini kontrol eder.

--copt=cc-option

Bu seçenek, derleyiciye iletilecek bir bağımsız değişkeni alır. Bağımsız değişken C, C++ ya da derleyici kodu ön işlemesi, derlemesi ve/veya derlenmesi için her çağrıldığında derleyiciye iletilir. Bu parametre, bağlantı oluştururken iletilmez.

Bu seçenek birden fazla kez kullanılabilir. Örneğin:

  % bazel build --copt="-g0" --copt="-fpic" //foo

foo kitaplığını hata ayıklama tabloları olmadan derleyerek konumdan bağımsız kod oluşturur.

--host_copt=cc-option

Bu seçenek, exec yapılandırmasında derlenen kaynak dosyalar için derleyiciye iletilecek bir bağımsız değişkeni alır. Bu, --copt seçeneğine benzer ancak yalnızca yönetici yapılandırması için geçerlidir.

--host_conlyopt=cc-option

Bu seçenek, exec yapılandırmasında derlenen C kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişkeni alır. Bu, --conlyopt seçeneğine benzer ancak yalnızca exec yapılandırması için geçerlidir.

--host_cxxopt=cc-option

Bu seçenek, exec yapılandırmasında derlenen C++ kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişkeni alır. Bu, --cxxopt seçeneğine benzer ancak yalnızca yönetici yapılandırması için geçerlidir.

--host_linkopt=linker-option

Bu seçenek, exec yapılandırmasında derlenen kaynak dosyalar için bağlayıcıya iletilecek bir bağımsız değişken alır. Bu, --linkopt seçeneğine benzer ancak yalnızca exec yapılandırması için geçerlidir.

--conlyopt=cc-option

Bu seçenek, C kaynak dosyaları derlenirken derleyiciye iletilecek bir bağımsız değişkeni alır.

Bu, --copt ile benzerdir ancak yalnızca C derlemesi için geçerlidir, C++ derlemesi veya bağlantı oluşturma için geçerli değildir. Böylece, C'ye özgü seçenekleri (-Wno-pointer-sign gibi) --conlyopt kullanarak aktarabilirsiniz.

--cxxopt=cc-option

Bu seçenek, C++ kaynak dosyaları derlenirken derleyiciye iletilecek bir bağımsız değişken alır.

Bu, --copt ile benzerdir ancak yalnızca C++ derlemesi için geçerlidir, C derlemesi veya bağlantı oluşturma için geçerli değildir. Böylece --cxxopt kullanarak C++'ya özgü seçenekleri (-fpermissive veya -fno-implicit-templates gibi) iletebilirsiniz.

Örneğin:

  % bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code

--linkopt=linker-option

Bu seçenek, bağlantı oluştururken derleyiciye iletilecek bir bağımsız değişken alır.

Bu, --copt işlevine benzer ancak yalnızca bağlama için geçerlidir, derleme için geçerli değildir. Böylece --linkopt kullanarak yalnızca bağlantı zamanında anlamlı olan derleyici seçeneklerini (-lssp veya -Wl,--wrap,abort gibi) iletebilirsiniz. Örneğin:

  % bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code

Derleme kuralları, özelliklerinde bağlantı seçeneklerini de belirtebilir. Bu seçeneğin ayarları her zaman önceliklidir. Ayrıca cc_library.linkopts bölümüne bakın.

--strip (always|never|sometimes)

Bu seçenek, bağlayıcıyı -Wl,--strip-debug seçeneğiyle çağırarak Bazel'ın tüm ikili programlar ve paylaşılan kitaplıklardan hata ayıklama bilgilerini çıkarıp çıkarmayacağını belirler. --strip=always, hata ayıklama bilgilerini her zaman çıkarma anlamına gelir. --strip=never, hata ayıklama bilgilerini asla çıkarmaması anlamına gelir. --compilation_mode fastbuild ise --strip=sometimes varsayılan değeri, şerit anlamına gelir.

  % bazel build --strip=always //foo:bar

hedefi derler ve oluşturulan tüm ikili programlardan hata ayıklama bilgilerini çıkarır.

Bazel'ın --strip seçeneği, ld --strip-debug seçeneğine karşılık gelir: Yalnızca hata ayıklama bilgilerini çıkarır. Herhangi bir nedenle yalnızca hata ayıklama simgelerini değil, tüm sembolleri de çıkarmak isterseniz ld --strip-all seçeneğini kullanmanız gerekir. Bu seçeneği, --linkopt=-Wl,--strip-all öğesini Bazel'a ileterek yapabilirsiniz. Ayrıca, Bazel'ın --strip işaretini ayarlamanın --linkopt=-Wl,--strip-all ayarını geçersiz kılacağını, bu nedenle yalnızca birini veya diğerini ayarlamanız gerektiğini de unutmayın.

Yalnızca tek bir ikili program oluşturuyorsanız ve tüm simgelerin çıkarılmasını istiyorsanız --stripopt=--strip-all değerini geçirebilir ve hedefin //foo:bar.stripped sürümünü açıkça oluşturabilirsiniz. --stripopt ile ilgili bölümde açıklandığı gibi bu yöntem, derlemenin tüm bağlantı işlemlerine çıkarma eklemek yerine, son ikili program bağlandıktan sonra bir çıkarma işlemi uygular.

--stripopt=strip-option

Bu, *.stripped ikili programı oluştururken strip komutuna geçirmek için sunulan ek bir seçenektir. Varsayılan değer: -S -p. Bu seçenek birden fazla kez kullanılabilir.

--fdo_instrument=profile-output-dir

--fdo_instrument seçeneği, oluşturulan C/C++ ikili programı yürütüldüğünde FDO (geri bildirim odaklı optimizasyon) profili çıkışı oluşturulmasını sağlar. GCC'de, sağlanan bağımsız değişken, her bir .o dosyasının profil bilgilerini içeren .gcda dosyalarından oluşan, nesne başına dosya dizin ağacı için dizin öneki olarak kullanılır.

Profil veri ağacı oluşturulduktan sonra profil ağacı sıkıştırılmalı ve FDO için optimize edilmiş derlemenin etkinleştirilmesi için --fdo_optimize=profile-zipBazel seçeneğine sağlanmalıdır.

LLVM derleyicisi için bağımsız değişken, aynı zamanda ham LLVM profili veri dosyalarının dökümü alındığı dizindir. Örneğin: --fdo_instrument=/path/to/rawprof/dir/.

--fdo_instrument ve --fdo_optimize seçenekleri aynı anda kullanılamaz.

--fdo_optimize=profile-zip

--fdo_optimize seçeneği, derleme sırasında FDO (geri bildirime yönelik optimizasyon) optimizasyonları gerçekleştirmek için nesne başına dosya profil bilgilerinin kullanılmasını sağlar. GCC için sağlanan bağımsız değişken, her bir .o dosyasının profil bilgilerini içeren .gcda dosyalarının önceden oluşturulmuş dosya ağacını içeren zip dosyasıdır.

Alternatif olarak, sağlanan bağımsız değişken .afdo uzantısı tarafından tanımlanan bir otomatik profili işaret edebilir.

LLVM derleyicisi için sağlanan bağımsız değişken, llvm-profdata aracı tarafından hazırlanan dizine eklenmiş LLVM profili çıkış dosyasına işaret etmeli ve bir .profdata uzantısına sahip olmalıdır.

--fdo_instrument ve --fdo_optimize seçenekleri aynı anda kullanılamaz.

--java_language_version=version

Bu seçenek Java kaynaklarının sürümünü belirtir. Örneğin:

  % bazel build --java_language_version=8 java/com/example/common/foo:all

derler ve yalnızca Java 8 spesifikasyonuyla uyumlu yapılara izin verir. Varsayılan değer 8'dir. --> Olası değerler: 8, 9, 10, 11, 14, 15 ve 21 ve default_java_toolchain kullanarak özel Java araç zincirleri kaydedilerek genişletilebilir.

--tool_java_language_version=version

Derleme sırasında yürütülen araçlar oluşturmak için kullanılan Java dili sürümü. Varsayılan değer 8'dir.

--java_runtime_version=version

Bu seçenek, kodu yürütmek ve testleri çalıştırmak için kullanılacak JVM sürümünü belirtir. Örneğin:

  % bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application

JDK 11'i uzaktaki bir depodan indirir ve bunu kullanarak Java uygulamasını çalıştırır.

local_jdk, varsayılan değerdir. Olası değerler şunlardır: local_jdk, local_jdk_version, remotejdk_11 ve remotejdk_17. local_java_repository veya remote_java_repository deposu kurallarından birini kullanıp özel JVM kaydederek değerleri genişletebilirsiniz.

--tool_java_runtime_version=version

Derleme sırasında gerekli araçları yürütmek için kullanılan JVM sürümü. remotejdk_11, varsayılan değerdir.

--jvmopt=jvm-option

Bu seçenek, seçenek bağımsız değişkenlerinin Java sanal makinesine iletilmesini sağlar. Büyük bir bağımsız değişkenle veya tek tek bağımsız değişkenlerle birden çok kez kullanılabilir. Örneğin:

  % bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all

tüm Java ikili programlarını başlatmak için sunucu sanal makinesini kullanır ve sanal makinenin başlangıç yığın boyutunu 256 MB olarak ayarlar.

--javacopt=javac-option

Bu seçenek, seçenek bağımsız değişkenlerinin javac'ye iletilmesine olanak tanır. Büyük bir bağımsız değişkenle veya tek tek bağımsız değişkenlerle birden çok kez kullanılabilir. Örneğin:

  % bazel build --javacopt="-g:source,lines" //myprojects:prog

varsayılan bazel hata ayıklama bilgileriyle bir java_binary dosyası oluşturur (bazel varsayılan değeri yerine).

Bu seçenek, javac için Bazel yerleşik varsayılan seçeneklerinden sonra ve kural başına seçeneklerden önce javac'a geçirilir. Javac için herhangi bir seçeneğin son spesifikasyonu kazanır. Javac için varsayılan seçenekler şunlardır:

  -source 8 -target 8 -encoding UTF-8

--strict_java_deps (default|strict|off|warn|error)

Bu seçenek, javac'ın eksik doğrudan bağımlılıkları kontrol edip etmediğini kontrol eder. Java hedefleri, doğrudan kullanılan tüm hedefleri bağımlılık olarak açıkça tanımlamalıdır. Bu işaret, javac'a, her bir Java dosyasının türünü kontrol etmek için gerçekte kullanılan jar'ları belirlemesi ve bunlar geçerli hedefin doğrudan bağımlılığının sonucu değilse uyarı/hata talimatı verir.

  • off, kontrol etmenin devre dışı bırakıldığı anlamına gelir.
  • warn, javac'ın her eksik doğrudan bağımlılık için [strict] türünde standart Java uyarıları oluşturacağı anlamına gelir.
  • default, strict ve error ifadelerinin tümü, javac'nin uyarı yerine hata üretmesine yol açar. Bu da, eksik doğrudan bağımlılıklar bulunursa mevcut hedefin oluşturulamamasına neden olur. İşaret belirtilmediğinde de varsayılan davranış budur.

Anlambilim oluşturun

Bu seçenekler, derleme komutlarını ve/veya çıkış dosyası içeriğini etkiler.

--compilation_mode (fastbuild|opt|dbg) (-c)

--compilation_mode seçeneği (genellikle -c, özellikle -c opt olarak kısaltılır) fastbuild, dbg veya opt bağımsız değişkenini alır ve optimizasyon düzeyi ile hata ayıklama tablolarının bütünlüğü gibi çeşitli C/C++ kod oluşturma seçeneklerini etkiler. Bazel, her farklı derleme modu için farklı bir çıkış dizini kullanır. Böylece, her sefer için tam bir yeniden derleme yapmanıza gerek kalmadan modlar arasında geçiş yapabilirsiniz.

  • fastbuild, olabildiğince hızlı derleme anlamına gelir: Minimum hata ayıklama bilgisi (-gmlt -Wl,-S) oluşturun ve optimizasyon yapmayın. Bu, varsayılan seçenektir. Not: -DNDEBUG ayarlanmayacak olmayacak.
  • dbg, gdb'yi (veya başka bir hata ayıklayıcıyı) kullanabilmeniz için hata ayıklamanın etkin (-g) ile derleme anlamına gelir.
  • opt, optimizasyonun etkinleştirildiği ve assert() çağrılarının devre dışı bırakıldığı (-O2 -DNDEBUG) derleme anlamına gelir. --copt -g değerini de geçmediğiniz sürece hata ayıklama bilgileri opt modunda oluşturulmaz.

--cpu=cpu

Bu seçenek, derleme sırasında ikili programların derlemesi için kullanılacak hedef CPU mimarisini belirtir.

--action_env=VAR=VALUE

Tüm işlemlerin yürütülmesi sırasında kullanılabilen ortam değişkenleri grubunu belirtir. Değişkenler ada göre belirtilebilir. Bu durumda değer, çağrı ortamından veya değeri çağrı ortamından bağımsız olarak ayarlayan name=value çifti tarafından alınır.

Bu --action_env işareti birden fazla kez belirtilebilir. Bir değer, birden fazla --action_env işareti genelinde aynı değişkene atanırsa en son atama kazanır.

--experimental_action_listener=label

experimental_action_listener seçeneği, Bazel'a yapı grafiğine extra_actions eklemek için label tarafından belirtilen action_listener kuralındaki ayrıntıları kullanmasını söyler.

--[no]experimental_extra_action_top_level_only

Bu seçenek true (doğru) değerine ayarlanırsa --experimental_action_listener komut satırı seçeneği tarafından belirtilen ek işlemler yalnızca üst düzey hedefler için planlanır.

--experimental_extra_action_filter=regex

experimental_extra_action_filter seçeneği, Bazel'a extra_actions için programlanacak hedef grubunu filtrelemesini bildirir.

Bu işaret yalnızca --experimental_action_listener işaretiyle birlikte kullanılabilir.

Varsayılan olarak, derlemek için istenen hedeflerin geçişli olarak kapanması sırasındaki tüm extra_actions yürütme için planlanır. --experimental_extra_action_filter, planlamayı sahibin etiketi belirtilen normal ifadeyle eşleşen extra_actions ile kısıtlar.

Aşağıdaki örnekte, extra_actions planlaması yalnızca sahibin etiketinde "/bar/" bulunan işlemlere uygulanacak şekilde sınırlanmıştır:

% bazel build --experimental_action_listener=//test:al //foo/... \
  --experimental_extra_action_filter=.*/bar/.*

--host_cpu=cpu

Bu seçenek, ana makine araçları oluşturmak için kullanılması gereken CPU mimarisinin adını belirtir.

--android_platforms=platform[,platform]*

android_binary kuralının geçişli deps'ini oluşturacak platformlar (özellikle C++ gibi yerel bağımlılıklar için). Örneğin, bir android_binary kuralının geçişli deps içinde bir cc_library görünüyorsa android_binary kuralı için --android_platforms ile belirtilen her platform için bir kez oluşturulur ve son çıkışa dahil edilir.

Bu işaret için varsayılan bir değer yoktur: Özel bir Android platformu tanımlanmalı ve kullanılmalıdır.

--android_platforms ile belirtilen her platform için bir .so dosyası oluşturulur ve APK'da paketlenir. .so dosyasının adı, android_binary kuralının adının önüne "lib" ekler. Örneğin, android_binary öğesinin adı "foo" ise dosya libfoo.so olur.

--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...

Mevcut olduğunda, dahil etme normal ifade ifadelerinden biriyle eşleşen ve hariç tutma ifadelerinin hiçbiriyle eşleşmeyen bir etikete veya yürütme yoluna sahip tüm C++ dosyaları verilen seçeneklerle oluşturulur. Etiket eşleştirme işleminde etiketin standart biçimi kullanılır (ör. //package:label_name).

Yürütme yolu, C++ dosyasının temel adı (uzantı dahil) dahil olmak üzere çalışma alanı dizininizin göreli yoludur. Platforma bağlı tüm ön ekleri de içerir.

Oluşturulan dosyaları eşleştirmek için (genrule çıkışlar gibi) Bazel yalnızca yürütme yolunu kullanabilir. Bu durumda, hiçbir yürütme yoluyla eşleşmediği için regexp'in "//" ile başlamaması gerekir. Paket adları aşağıdaki gibi kullanılabilir: --per_file_copt=base/.*\.pb\.cc@-g0. Bu işlem, base adlı dizin altındaki her .pb.cc dosyasıyla eşleşir.

Bu seçenek birden fazla kez kullanılabilir.

Bu seçenek, kullanılan derleme modundan bağımsız olarak uygulanır. Örneğin, --compilation_mode=opt ile derleme yapabilir ve daha güçlü optimizasyon etkinken veya optimizasyon devre dışıyken bazı dosyaları seçerek derleyebilirsiniz.

Uyarı: Bazı dosyalar hata ayıklama sembolleriyle seçici bir şekilde derlenirse bağlantı sırasında simgeler kaldırılabilir. Bu durum, --strip=never ayarıyla önlenebilir.

Söz dizimi: [+-]regex[,[+-]regex]...@option[,option]... Burada regex, dahil etme kalıplarını tanımlamak için +, hariç tutma kalıplarını tanımlamak için - önekini kullanabilen normal ifade anlamına gelir. option, C++ derleyicisine geçirilen rastgele bir seçeneği ifade eder. Bir seçenek, , içeriyorsa \, şeklinde alıntılanmalıdır. Normal ifadeleri seçeneklerden ayırmak için yalnızca ilk @ kullanıldığından seçenekler @ öğesini de içerebilir.

Örnek: --per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs, file.cc dışında //foo/ içindeki tüm .cc dosyaları için C++ derleyicisinin komut satırına -O0 ve -fprofile-arcs seçeneklerini ekler.

--dynamic_mode=mode

C++ ikili programlarının, derleme kurallarındaki linkstatic özelliğiyle etkileşimde bulunarak dinamik olarak bağlanıp bağlanmayacağını belirler.

Modlar:

  • auto: Platforma bağlı moda çevirir; linux için default ve cygwin için off.
  • default: Bazel'ın dinamik olarak bağlanıp bağlanmayacağını seçmesini sağlar. Daha fazla bilgi için bkz. linkstatic.
  • fully: Tüm hedefleri dinamik olarak bağlar. Bu, bağlantı süresini kısaltır ve ortaya çıkan ikili programların boyutunu azaltır.
  • off: Tüm hedefleri çoğunlukla statik modda bağlar. -static, linkopts'ta ayarlanırsa hedefler tamamen statik olacak şekilde değişir.

--fission (yes|no|[dbg][,opt][,fastbuild])

Diğer durumlarda .o dosyaları yerine özel .dwo dosyalarına C++ hata ayıklama bilgilerini yazan Fission'ı etkinleştirir. Bu, bağlantılardaki giriş boyutunu önemli ölçüde azaltır ve bağlantı sürelerini kısaltabilir.

[dbg][,opt][,fastbuild] değerine ayarlandığında (örnek: --fission=dbg,fastbuild) Fission, yalnızca belirtilen derleme modları grubu için etkinleştirilir. Bu, Bazelrc ayarları için yararlı bir özelliktir. yes değerine ayarlandığında Fisyon, evrensel olarak etkinleştirilir. no olarak ayarlandığında Fisyon evrensel olarak devre dışı bırakılır. no varsayılandır.

--force_ignore_dash_static

Bu işaret ayarlanırsa cc_* kural BUILD dosyalarının bağlantılarındaki -static seçenekleri yoksayılır. Bu yalnızca C++ sağlamlaştırma derlemeleri için geçici bir çözüm olarak tasarlanmıştır.

--[no]force_pic

Etkinleştirilirse tüm C++ derlemeleri konumdan bağımsız kod ("-fPIC") üretir, bağlantılar PIC olmayan kitaplıklar yerine PIC önceden oluşturulmuş kitaplıkları tercih eder ve bağlantılar da konumdan bağımsız yürütülebilir dosyalar ("-pie") üretir. Varsayılan olarak devre dışıdır.

--android_resource_shrinking

android_binary kuralları için kaynak daraltma işlemi gerçekleştirilip gerçekleştirilmeyeceğini belirler. Android_binary kurallarında shrink_resources özelliği için varsayılan değeri ayarlar. Daha ayrıntılı bilgi için bu kuralın dokümanlarına bakın. Varsayılan olarak kapalı değerine ayarlanır.

--custom_malloc=malloc-library-target

Belirtildiğinde, varsayılan değeri kullanan hedefler dahil (herhangi bir malloc belirtmeyerek) tüm malloc="target" özelliklerini geçersiz kılarak her zaman belirtilen Malloc uygulamasını kullanın.

--crosstool_top=label

Bu seçenek, bir derleme sırasında tüm C++ derlemeleri için kullanılacak çapraz araç derleyici paketinin konumunu belirtir. Bazel bu konumda bir CROSSTOOL dosyası arar ve bunu --compiler ayarlarını otomatik olarak belirlemek için kullanır.

--host_crosstool_top=label

Belirtilmezse Bazel, derleme sırasında çalıştırılan araçlar gibi yürütme yapılandırmasında kodu derlemek için --crosstool_top değerini kullanır. Bu işaretin temel amacı, çapraz derlemeye olanak tanımaktır.

--apple_crosstool_top=label

C/C++ kurallarını objc*, iOS* ve apple* kurallarının geçişli deps içinde derlemek için kullanılacak çapraz araç. Söz konusu hedefler için bu işaret, --crosstool_top değerinin üzerine yazılır.

--android_crosstool_top=label

android_binary kurallarının geçişli deps içindeki C/C++ kurallarını derlemek için kullanılacak çapraz araç. Bu, derlemedeki diğer hedefler için farklı bir çapraz araç gerekiyorsa yararlı olur. Varsayılan olarak, WORKSPACE dosyasında android_ndk_repository kuralı tarafından oluşturulan çapraz araç kullanılır. Ayrıca bkz. --android_platforms.

--compiler=version

Bu seçenek, derleme sırasında ikili programların derlemesinde kullanılacak C/C++ derleyici sürümünü (ör. gcc-4.1.0) belirtir. Özel bir çapraz araçla derlemek istiyorsanız bu işareti belirtmek yerine bir CROSSTOOL dosyası kullanmanız gerekir.

--android_sdk=label

Kullanımdan kaldırıldı. Bu, doğrudan belirtilmemelidir.

Bu seçenek, Android ile ilgili kuralları oluşturmak için kullanılacak Android SDK/platform araç zincirini ve Android çalışma zamanı kitaplığını belirtir.

WORKSPACE dosyasında android_sdk_repository kuralı tanımlanırsa Android SDK otomatik olarak seçilir.

--java_toolchain=label

Bu seçenek, Java kaynak dosyalarını derlemek için kullanılan java_toolchain etiketini belirtir.

--host_java_toolchain=label

Belirtilmezse Bazel, --java_toolchain değerini kullanarak kodu derleme sırasında çalıştırılan araçlar gibi yürütme yapılandırmasında derlemek için kullanır. Bu işaretin temel amacı, çapraz derlemeye olanak tanımaktır.

--javabase=(label)

Bu seçenek, temel Java yüklemesinin etiketini bazel çalıştırma, bazel test ve java_binary ile java_test kuralları tarafından oluşturulan Java ikili programları için kullanılacak şekilde ayarlar. JAVABASE ve JAVA "Marka" değişkenleri bu seçenekten türetilir.

--host_javabase=label

Bu seçenek, exec yapılandırmasında kullanılacak temel Java yüklemesinin (örneğin, JavaBuilder ve Singlejar'ı içeren ana makine derleme araçları) etiketini ayarlar.

Bu komut, Java kaynak dosyalarını derlemek için kullanılan Java derleyicisini seçmez. Derleyici, --java_toolchain seçeneğindeki ayarlar kullanılarak seçilebilir.

Yürütme stratejisi

Bu seçenekler Bazel'ın derlemeyi nasıl yürüteceğini etkiler. Derlemenin oluşturduğu çıkış dosyaları üzerinde önemli bir etkisi olmamalıdır. Genellikle ana etkileri derleme hızı üzerindedir.

--spawn_strategy=strategy

Bu seçenek, komutların nerede ve nasıl yürütüleceğini kontrol eder.

  • standalone, komutların yerel alt işlemler olarak yürütülmesine neden olur. Bu değer kullanımdan kaldırılmıştır. Lütfen bunun yerine local sütununu kullanın.
  • sandboxed, komutların yerel makinedeki bir korumalı alan içinde yürütülmesine neden olur. Bunun için tüm giriş dosyalarının, veri bağımlılıklarının ve araçların srcs, data ve tools özelliklerinde doğrudan bağımlılık olarak listelenmesi gerekir. Bazel, korumalı alana alınmış yürütmeyi destekleyen sistemlerde varsayılan olarak yerel korumalı alanı etkinleştirir.
  • local, komutların yerel alt işlemler olarak yürütülmesine neden olur.
  • worker, varsa kalıcı çalışan kullanılarak komutların yürütülmesine neden olur.
  • docker, komutların yerel makinedeki bir Docker korumalı alanı içinde yürütülmesine neden olur. Bunun için docker'ın yüklü olması gerekir.
  • remote, komutların uzaktan yürütülmesine neden olur. Bu yalnızca bir uzaktan yürütücü ayrı olarak yapılandırılmışsa kullanılabilir.

--strategy mnemonic=strategy

Bu seçenek, komutların nerede ve nasıl yürütüldüğünü kontrol ederek anımsatıcı bazında --spawn_strategy (ve --genrule_strategy ile anımsatıcı oluşturma) işlemini geçersiz kılar. Desteklenen stratejiler ve etkileri için --spawn_strategy sayfasını inceleyin.

--strategy_regexp=<filter,filter,...>=<strategy>

Bu seçenek, belirli bir regex_filter ile eşleşen açıklamalara sahip komutları yürütmek için hangi stratejinin kullanılması gerektiğini belirtir. regex_filter eşleşmesiyle ilgili ayrıntılar için --per_file_copt adresine bakın. Desteklenen stratejiler ve etkileri için --spawn_strategy sayfasını inceleyin.

Açıklamayla eşleşen son regex_filter kullanılır. Bu seçenek, stratejiyi belirten diğer işaretleri geçersiz kılar.

  • Örnek: --strategy_regexp=//foo.*\\.cc,-//foo/bar=local, açıklamaları //foo.*.cc ile eşleşiyor ancak //foo/bar ile eşleşmiyorsa local stratejisini kullanarak işlem çalıştırmak anlamına gelir.
  • Örnek: --strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed, sandboxed stratejisiyle "//foo/bar/baz" derleniyor, sıra tersine çevrildiğinde local ile çalıştırılır.
  • Örnek: --strategy_regexp='Compiling.*/bar=local,sandboxed', local stratejisiyle "//foo/bar/baz" derleniyor ve başarısız olursa sandboxed yöntemine geri dönüyor.

--genrule_strategy=strategy

Bu, --strategy=Genrule=strategy için kullanımdan kaldırılmış bir kısaltmadır.

--jobs=n (-j)

Tam sayı bağımsız değişken alan bu seçenek, derlemenin yürütme aşamasında eşzamanlı olarak yürütülmesi gereken iş sayısı için bir sınır belirtir.

--progress_report_interval=n

Bazel, henüz tamamlanmamış olan işlerle (ör. uzun süren testler) ilgili düzenli aralıklarla bir ilerleme raporu yazdırır. Bu seçenek, raporlama sıklığını ayarlar. İlerleme durumu n saniyede bir yazdırılır.

Varsayılan değer 0'dır, yani artımlı bir algoritma söz konusudur: İlk rapor 10 saniye, ardından 30 saniye sonra yazdırılır ve bu ilerleme durumu dakikada bir raporlanır.

Bazel, --curses tarafından belirtildiği gibi imleç kontrolünü kullanırken ilerleme, saniyede bir raporlanır.

--local_{ram,cpu}_resources resources or resource expression

Bu seçenekler, Bazel'ın derleme ve test etkinliklerini yerel olarak çalışacak şekilde planlarken dikkate alabileceği yerel kaynak miktarını (MB cinsinden RAM ve CPU mantıksal çekirdek sayısı) belirtir. Bunlar bir tam sayı veya isteğe bağlı olarak bir anahtar kelime (HOST_RAM veya HOST_CPUS) ve ardından [-|*kayan] iletir (örneğin, --local_cpu_resources=2, --local_ram_resources=HOST_RAM*.5, --local_cpu_resources=HOST_CPUS-1). İşaretler bağımsızdır; biri veya her ikisi de ayarlanabilir. Varsayılan olarak Bazel, RAM ve CPU çekirdeği sayısını doğrudan yerel sistemin yapılandırmasından tahmin eder.

Varsayılan olarak etkinleştirilen bu seçenek, testler ve ikili programlar için runfiles sembollerinin çıkış dizininde derlenip derlenmeyeceğini belirtir. --nobuild_runfile_links kullanımı, tüm hedeflerin derlenip derlendiğini ve runfiles ağaçlarını oluşturmak için ek yük gerektirmeden derlendiğini doğrulamak açısından faydalı olabilir.

Testler (veya uygulamalar) yürütüldüğünde, çalışma zamanındaki veri bağımlılıkları tek bir yerde toplanır. Bazel'ın çıkış ağacında, bu "runfiles" ağacı genellikle karşılık gelen ikili programın veya testin eşdüzeyi olarak köklenir. Test yürütme sırasında, çalıştırma dosyalarına $TEST_SRCDIR/workspace/packagename/filename biçimindeki yollar kullanılarak erişilebilir. Runfiles ağacı, testlerin üzerinde bağımlılık içeren tüm dosyalara erişebilmesini sağlar ve başka hiçbir şeye erişemez. Varsayılan olarak Runfiles ağacı, gerekli dosyalara yönelik bir dizi sembolik bağlantı oluşturularak uygulanır. Bağlantı grubu büyüdükçe bu işlemin maliyeti de artar. Bazı büyük derlemelerde özellikle her bağımsız testin (veya uygulamanın) kendi çalıştırma dosyaları ağacına ihtiyacı olduğu için bu işlem toplam derleme süresine önemli ölçüde katkıda bulunabilir.

--[no]build_runfile_manifests

Varsayılan olarak etkinleştirilen bu seçenek, runfiles manifestlerinin çıkış ağacına yazılıp yazılmayacağını belirtir. Devre dışı bırakmak --nobuild_runfile_links anlamına gelir.

Runfiles ağaçları, bellek içi manifestlerden uzaktan oluşturulduğundan testler uzaktan çalıştırılırken devre dışı bırakılabilir.

--[no]discard_analysis_cache

Bu seçenek etkinleştirildiğinde Bazel, yürütme başlamadan hemen önce analiz önbelleğini siler ve böylece yürütme aşaması için ek bellek (yaklaşık %10) boşaltır. Bunun dezavantajı, sonraki artımlı derlemelerin daha yavaş olmasıdır. Bellek tasarrufu modu konusuna da bakın.

--[no]keep_going (-bin)

GNU Make'de olduğu gibi, ilk hatayla karşılaşıldığında bir derlemenin yürütme aşaması durur. Bazen hatalar karşısında bile mümkün olduğunca fazlasını geliştirmeye çalışmak yararlı olur. Bu seçenek, bu davranışı etkinleştirir ve belirtildiğinde derleme, ön koşulları başarıyla oluşturulmuş olan her hedefi oluşturmaya çalışır ancak hataları yok sayar.

Bu seçenek genellikle bir derlemenin yürütme aşamasıyla ilişkili olsa da analiz aşamasını da etkiler: Derleme komutunda birkaç hedef belirtilmişse ve bunlardan yalnızca bazıları başarıyla analiz edilebiliyorsa --keep_going belirtilmediği sürece derleme bir hatayla durur. Bu durumda derleme, yürütme aşamasına geçer ancak yalnızca başarıyla analiz edilen hedefler için devam eder.

--[no]use_ijars

Bu seçenek, java_library hedeflerinin Bazel tarafından derleme şeklini değiştirir. Bazel, bağımlı java_library hedeflerini derlemek için java_library çıktısını kullanmak yerine yalnızca özel olmayan üyelerin (herkese açık, korumalı ve varsayılan (paket) erişim yöntemleri ve alanları) imzalarını içeren arayüz jar'ları oluşturur ve bağımlı hedefleri derlemek için arayüz jar'larını kullanır. Bu, yalnızca yöntem gövdelerinde veya bir sınıfın özel üyelerinde değişiklik yapıldığında yeniden derlemenin önlenmesine olanak tanır.

--[no]interface_shared_objects

Bu seçenek, ikili programların ve diğer paylaşılan kitaplıkların, paylaşılan bir nesnenin uygulaması yerine arayüzüne bağlı olmasını sağlayan paylaşılan nesnelerin arayüzü özelliğini etkinleştirir. Yalnızca uygulama değişiklikleri yapıldığında Bazel, değiştirilen paylaşılan kitaplığa bağlı hedefleri gereksiz yere yeniden oluşturmaktan kaçınabilir.

Çıkış seçimi

Bu seçenekler neyin derleneceğini veya test edileceğini belirler.

--[no]build

Bu seçenek, derlemenin yürütme aşamasının gerçekleşmesine neden olur; varsayılan olarak etkindir. Bu özellik kapatıldığında yürütme aşaması atlanır ve yalnızca ilk iki aşama olan yükleme ve analiz gerçekleşir.

Bu seçenek, gerçekte herhangi bir şey derlemeden BUILD dosyalarını doğrulamak ve girişlerdeki hataları algılamak için yararlı olabilir.

--[no]build_tests_only

Belirtilirse Bazel yalnızca boyut, zaman aşımı, etiket veya dil nedeniyle filtrelenmemiş *_test ve test_suite kurallarını çalıştırmak için gerekenleri oluşturur. Belirtilirse Bazel, komut satırında belirtilen diğer hedefleri yoksayar. Varsayılan olarak bu seçenek devre dışıdır ve Bazel, testin dışında bırakılan *_test ve test_suite kuralları da dahil olmak üzere istenen her şeyi oluşturur. bazel test --build_tests_only foo/... çalıştırmak foo ağacındaki tüm derleme bozukluklarını algılayamayabileceği için bu faydalı bir özelliktir.

--[no]check_up_to_date

Bu seçenek, Bazel'ın bir derleme gerçekleştirmemesine, yalnızca belirtilen tüm hedeflerin güncel olup olmadığını kontrol etmesine neden olur. Bu durumda derleme her zamanki gibi başarıyla tamamlanır. Bununla birlikte, herhangi bir dosya eskiyse, oluşturulmak yerine bir hata bildirilir ve derleme başarısız olur. Bu seçenek, derleme maliyetine neden olmadan bir derlemenin kaynak düzenlemesinden daha yakın zamanda gerçekleştirilmiş olup olmadığını (örneğin, gönderme öncesi kontrolleri için) belirlemek açısından yararlı olabilir.

Ayrıca bkz. --check_tests_up_to_date.

--[no]compile_one_dependency

Bağımsız değişken dosyalarının tek bir bağımlılığını derleyin. Bu, IDE'lerdeki kaynak dosyaların söz diziminin kontrolünde faydalıdır. Örneğin, hata düzenleme/derleme/test döngüsünde hataları mümkün olduğunca erken algılamak için kaynak dosyaya bağlı tek bir hedefi yeniden oluşturabilirsiniz. Bu bağımsız değişken, işaret olmayan tüm bağımsız değişkenlerin yorumlanma şeklini etkiler: Her bağımsız değişken, geçerli çalışan dizine göre bir dosya hedef etiketi veya düz dosya adı olmalı ve her bir kaynak dosya adına bağlı olan bir kural oluşturulmalıdır. C++ ve Java kaynakları için tercihen aynı dil alanındaki kurallar seçilir. Aynı tercihe sahip birden çok kural için, DERLEME dosyasında ilk sırada görünen kural seçilir. Kaynak dosyaya başvurmayan, açık şekilde adlandırılmış hedef kalıp hatayla sonuçlanır.

--save_temps

--save_temps seçeneği, derleyiciden geçici çıkışların kaydedilmesine neden olur. Bunlar arasında .s dosyaları (derleyici kodu), .i (önceden işlenmiş C) ve .ii (önceden işlenmiş C++) dosyaları bulunur. Bu çıkışlar genellikle hata ayıklama için yararlıdır. Geçici değerler yalnızca komut satırında belirtilen hedef grubu için oluşturulur.

--save_temps işareti şu anda yalnızca cc_* kuralları için çalışmaktadır.

Bazel'ın ek çıkış dosyalarının konumunu yazdırdığından emin olmak için --show_result n ayarınızın yeterince yüksek olduğundan emin olun.

--build_tag_filters=tag[,tag]*

Belirtilirse Bazel yalnızca en az bir gerekli etikete sahip (bunlardan herhangi biri belirtilirse) ve hariç tutulan herhangi bir etikete sahip olmayan hedefler oluşturur. Derleme etiketi filtresi, etiket anahtar kelimelerinin virgülle ayrılmış listesi olarak belirtilir ve isteğe bağlı olarak öncesinde hariç tutulan etiketleri belirtmek için kullanılan "-" işaretiyle başlar. Gerekli etiketlerin başında "+" işareti de olabilir.

Test çalıştırırken Bazel, bu filtreyle eşleşmeseler bile oluşturulup çalıştırılan test hedefleri için --build_tag_filters öğesini yoksayar. Bunları oluşturmaktan kaçınmak için test hedeflerini --test_tag_filters kullanarak veya açıkça hariç tutarak filtreleyin.

--test_size_filters=size[,size]*

Belirtilirse Bazel yalnızca belirtilen boyuttaki hedefleri test eder (veya --build_tests_only belirtilmişse oluşturur). Test boyutu filtresi, izin verilen test boyutu değerlerinin (küçük, orta, büyük veya çok büyük) virgülle ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak öncesinde hariç tutulan test boyutlarını belirtmek için kullanılan "-" işareti bulunur. Örneğin,

  % bazel test --test_size_filters=small,medium //foo:all

ve

  % bazel test --test_size_filters=-large,-enormous //foo:all

//foo içindeki küçük ve orta ölçekli testleri test eder.

Varsayılan olarak, test boyutu filtrelemesi uygulanmaz.

--test_timeout_filters=timeout[,timeout]*

Belirtilirse Bazel yalnızca belirtilen zaman aşımına sahip hedefleri test eder (veya --build_tests_only belirtilmişse oluşturur). Test zaman aşımı filtresi, izin verilen test zaman aşımı değerlerinin (kısa, orta, uzun veya kalıcı) virgülle ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak öncesinde, hariç tutulan test zaman aşımlarını belirtmek için kullanılan "-" işareti bulunur. Örnek söz dizimi için --test_size_filters etiketine bakın.

Varsayılan olarak, test zaman aşımı filtrelemesi uygulanmaz.

--test_tag_filters=tag[,tag]*

Belirtilirse Bazel yalnızca en az bir gerekli etikete sahip (bunlardan herhangi biri belirtildiyse) ve hariç tutulan herhangi bir etiketi olmayan hedefleri test eder (veya --build_tests_only belirtilmişse oluşturur). Test etiketi filtresi, etiket anahtar kelimelerinin virgülle ayrılmış listesi olarak belirtilir ve isteğe bağlı olarak önüne hariç tutulan etiketleri belirtmek için kullanılan "-" işaretiyle eklenir. Gerekli etiketlerin başında "+" işareti de olabilir.

Örneğin,

  % bazel test --test_tag_filters=performance,stress,-flaky //myproject:all

performance veya stress etiketiyle etiketlenmiş olan ancak flaky etiketiyle etiketlenmemiş hedefleri test eder.

Varsayılan olarak, test etiketi filtrelemesi uygulanmaz. Ayrıca, testin size ve local etiketlerini bu şekilde filtreleyebilirsiniz.

--test_lang_filters=string[,string]*

Test kuralı sınıflarının adlarına başvuruda bulunan dizelerin virgülle ayrılmış bir listesini belirtir. foo_test kural sınıfına başvurmak için "foo" dizesini kullanın. Bazel, yalnızca referans verilen kural sınıflarının hedeflerini test eder (veya --build_tests_only belirtilmişse oluşturur). Bunun yerine bu hedefleri hariç tutmak için "-foo" dizesini kullanın. Örneğin,

  % bazel test --test_lang_filters=foo,bar //baz/...

//baz/... içinde yalnızca foo_test veya bar_test örneği olan hedefleri test ederken,

  % bazel test --test_lang_filters=-foo,-bar //baz/...

foo_test ve bar_test örnekleri dışında //baz/... içindeki tüm hedefleri test eder.

--test_filter=filter-expression

Test çalıştırıcının, çalıştırılacak testlerin bir alt kümesini seçmek için kullanabileceği bir filtreyi belirtir. Çağrıda belirtilen tüm hedefler derlenir ancak ifadeye bağlı olarak yalnızca bazıları yürütülebilir; bazı durumlarda yalnızca belirli test yöntemleri çalıştırılır.

filter-expression öğesinin özel yorumu, testi çalıştırmaktan sorumlu test çerçevesine bağlıdır. Bu bir glob, alt dize veya regexp olabilir. --test_filter, farklı --test_arg filtre bağımsız değişkenlerinin aktarılması açısından kullanışlıdır. Ancak tüm çerçeveler bunu desteklemez.

Ayrıntı düzeyi

Bu seçenekler, terminale veya ek günlük dosyalarına Bazel çıktısının ayrıntı düzeyini kontrol eder.

--explain=logfile

Dosya adı bağımsız değişkeni gerektiren bu seçenek, bazel build yürütme aşamasındaki bağımlılık denetleyicisinin, her derleme adımı için neden yürütüldüğünü veya güncel olduğunu açıklamasını sağlar. Açıklama logfile dosyasına yazılır.

Beklenmedik yeniden oluşturma işlemleriyle karşılaşıyorsanız bu seçenek, sorunun nedenini anlamanıza yardımcı olabilir. Sonraki tüm derlemelerde günlüğe kaydın yapılması için bunu .bazelrc cihazınıza ekleyin. Beklenmedik şekilde yürütülen bir yürütme adımı gördüğünüzde günlüğü inceleyin. Bu seçenek küçük bir performans kaybına neden olabileceğinden artık gerekli olmadığında seçeneği kaldırmak isteyebilirsiniz.

--verbose_explanations

Bu seçenek, --explain seçeneği etkinleştirildiğinde oluşturulan açıklamaların ayrıntı düzeyini artırır.

Özellikle, ayrıntılı açıklamalar etkinleştirilirse ve oluşturmak için kullanılan komut değiştiği için bir çıkış dosyası yeniden oluşturulursa açıklama dosyasındaki çıkış, yeni komutun tüm ayrıntılarını içerir (en azından çoğu komut için).

Bu seçeneğin kullanılması, oluşturulan açıklama dosyasının uzunluğunu ve --explain kullanmanın performans cezasını önemli ölçüde artırabilir.

--explain etkinleştirilmemişse --verbose_explanations hiçbir etkisi olmaz.

--profile=file

Dosya adı bağımsız değişkenini alan bu seçenek, Bazel'ın dosyaya profil oluşturma verileri yazmasına neden olur. Daha sonra veriler bazel analyze-profile komutu kullanılarak analiz edilebilir veya ayrıştırılabilir. Derleme profili, Bazel'ın build komutunun nerede zaman geçirdiğini anlamanıza yardımcı olabilir.

--[no]show_loading_progress

Bu seçenek, Bazel'ın paket yükleme ilerleme durumu mesajlarını çıkarmasına neden olur. Bu ayar devre dışı bırakılırsa mesajlar gösterilmez.

--[no]show_progress

Bu seçenek, ilerleme mesajlarının görüntülenmesine neden olur; varsayılan olarak açıktır. Devre dışı bırakıldığında ilerleme mesajları gizlenir.

--show_progress_rate_limit=n

Bu seçenek, Bazel'ın n saniyede en fazla bir ilerleme mesajı göstermesine neden olur. Burada n, gerçek bir sayıdır. Bu seçenek için varsayılan değer 0,02'dir. Yani Bazel, ilerleme mesajlarını her 0,02 saniyede bir olacak şekilde sınırlandırır.

--show_result=n

Bu seçenek, bazel build komutunun sonundaki sonuç bilgilerinin yazdırılmasını kontrol eder. Varsayılan olarak, tek bir derleme hedefi belirtilirse Bazel, hedefin başarılı bir şekilde güncellenip güncellenmediğini ve varsa hedefin oluşturduğu çıkış dosyalarının listesini belirten bir mesaj yazdırır. Birden çok hedef belirtilmişse sonuç bilgileri gösterilmez.

Sonuç bilgileri, tek bir veya birkaç hedefin derlemeleri için yararlı olsa da büyük derlemelerde (üst düzey proje ağacının tamamı gibi) bu bilgiler bunaltıcı ve dikkat dağıtıcı olabilir; bu seçenek kontrol edilmesine olanak tanır. --show_result, tam sonuç bilgilerinin yazdırılması gereken maksimum hedef sayısı olan bir tam sayı bağımsız değişkeni alır. Varsayılan olarak bu değer 1'dir. Bu eşiğin üzerindeki hedefler için tek tek sonuç bilgisi gösterilmez. Bu nedenle sıfır, sonuç bilgilerinin her zaman bastırılmasına neden olur. Çok büyük bir değer ise sonucun her zaman yazdırılmasına neden olur.

Kullanıcılar, düzenli olarak küçük bir hedef grubu (örneğin, derleme-düzenleme testi döngüsü sırasında) oluşturmakla büyük bir hedef grubu oluşturmak (örneğin, yeni bir çalışma alanı oluştururken veya regresyon testleri yürütürken) arasında bir değer seçmek isteyebilir. İlk durumda sonuç bilgisi çok kullanışlıyken ikinci durumda çok faydalıdır. Tüm seçeneklerde olduğu gibi, bu bilgi .bazelrc dosyası aracılığıyla dolaylı olarak belirtilebilir.

Dosyalar, derlenen yürütülebilir dosyaların çalıştırılabilmesi için dosya adını kopyalayıp kabuğa yapıştırmayı kolaylaştıracak şekilde yazdırılır. Her bir hedef için "güncel" veya "başarısız" mesajları, bir derleme çalıştıran komut dosyaları tarafından kolayca ayrıştırılabilir.

--sandbox_debug

Bu seçenek, işlem gerçekleştirmek için korumalı alana alma işlemi kullanılırken Bazel'ın ek hata ayıklama bilgileri yazdırmasına neden olur. Bu seçenek aynı zamanda korumalı alan dizinlerini de korur. Böylece, yürütme sırasında işlemlere görünen dosyalar incelenebilir.

--subcommands (-s)

Bu seçenek, Bazel'ın yürütme aşamasının, her bir komut için yürütmeden önce tam komut satırını yazdırmasına neden olur.

  >>>>> # //examples/cpp:hello-world [action 'Linking examples/cpp/hello-world']
  (cd /home/johndoe/.cache/bazel/_bazel_johndoe/4c084335afceb392cfbe7c31afee3a9f/bazel && \
    exec env - \
    /usr/bin/gcc -o bazel-out/local-fastbuild/bin/examples/cpp/hello-world -B/usr/bin/ -Wl,-z,relro,-z,now -no-canonical-prefixes -pass-exit-codes -Wl,-S -Wl,@bazel-out/local_linux-fastbuild/bin/examples/cpp/hello-world-2.params)

Mümkün olduğunda, komutlar Bourne kabuğu uyumlu bir söz diziminde yazdırılır. Böylece, komutlar kolayca kopyalanıp bir kabuk komut istemine yapıştırılabilir. (İçindeki parantezler, kabuğunuzu cd ve exec çağrılarından korumak için sağlanmıştır. Bunları kopyalamayı unutmayın.) Bununla birlikte, sembolik bağlantı ağaçları oluşturma gibi bazı komutlar Bazel içinde dahili olarak uygulanır. Bunlar için görüntülenecek komut satırı yoktur.

Komutun bağımsız değişkenlerini tek bir satır yerine liste olarak yazdırmak için --subcommands=pretty_print aktarılabilir. Bu, uzun komut satırlarının daha okunabilir olmasına yardımcı olabilir.

Aşağıdaki --verbose_failures bölümünü de inceleyin.

Alt komutları aracın kullanışlı bir biçimde kaydını tutmak için --execution_log_json_file ve --execution_log_binary_file dosyalarına bakın.

--verbose_failures

Bu seçenek, Bazel'ın yürütme aşamasının, başarısız olan komutlar için tam komut satırını yazdırmasına neden olur. Başarısız bir derlemenin hatalarını ayıklamak açısından bu çok önemli olabilir.

Başarısız komutlar, kopyalanıp kabuk istemine yapıştırılmaya uygun olan Bourne kabuğu uyumlu bir söz diziminde yazdırılır.

Çalışma alanı durumu

Bazel tarafından oluşturulan ikili programları "damgalamak" için şu seçenekleri kullanın: Kaynak kontrol düzeltmesi veya çalışma alanıyla ilgili diğer bilgiler gibi ek bilgileri ikili programlara yerleştirmek için. Bu sistemi, stamp özelliğini destekleyen genrule ve cc_binary gibi kurallarla kullanabilirsiniz.

--workspace_status_command=program

Bu işaret, Bazel'ın her derlemeden önce çalıştıracağı bir ikili programı belirtmenizi sağlar. Program, mevcut kaynak kontrol düzeltmesi gibi çalışma alanının durumuyla ilgili bilgileri raporlayabilir.

İşaretin değeri, yerel programa giden bir yol olmalıdır. Linux/macOS'te bu, yürütülebilir herhangi bir dosya olabilir. Windows'da bu yerel bir ikili program (genellikle ".exe", ".bat" veya ".cmd" dosyası) olmalıdır.

Program, sıfır veya daha fazla anahtar/değer çiftini standart çıkışa yazdırmalıdır. Her satırda bir giriş olmalıdır, ardından sıfır ile çıkış yapmalıdır (aksi takdirde derleme başarısız olur). Anahtar adları herhangi bir ad olabilir, ancak sadece büyük harf ve alt çizgi içerebilir. Anahtar adından sonraki ilk boşluk, anahtarı değerden ayırır. Değer, satırın geri kalanıdır (ek boşluklar dahil). Ne anahtar ne de değer birden çok satırdan oluşabilir. Anahtarlar yinelenmemelidir.

Bazel, anahtarları iki gruba ayırır: "kararlı" ve "değişken". ("Kararlı" ve "değişken" adları biraz sezgisel değildir, bu yüzden bunlar hakkında fazla düşünmeyin.)

Daha sonra Bazel, anahtar/değer çiftlerini iki dosyaya yazar:

  • bazel-out/stable-status.txt anahtar adının STABLE_ ile başladığı tüm anahtar ve değerleri içerir
  • bazel-out/volatile-status.txt anahtarların geri kalanını ve değerlerini içerir

Sözleşme:

  • "kararlı" anahtarların değerleri mümkünse nadiren değişmelidir. bazel-out/stable-status.txt içeriği değişirse Bazel bu içeriklere bağlı işlemleri geçersiz kılar. Diğer bir deyişle, sabit bir anahtarın değeri değişirse Bazel damgalı işlemleri yeniden çalıştırır. Bu nedenle, kararlı durumu sürekli olarak değiştiği ve Bazel'ın her derlemede damgalı işlemleri yeniden çalıştırmasına neden olacağından zaman damgası gibi öğeler içermemelidir.

    Bazel her zaman aşağıdaki sabit anahtarları oluşturur:

    • BUILD_EMBED_LABEL: --embed_label değeri
    • BUILD_HOST: Bazel'ın çalıştığı ana makinenin adı
    • BUILD_USER: Bazel'ın çalıştığı kullanıcının adı
  • "Değişken" anahtarların değerleri sık sık değişebilir. Bazel, zaman damgaları gibi bunların sürekli olarak değişmesini bekliyor ve bazel-out/volatile-status.txt dosyasını gerektiği gibi günceller. Bununla birlikte, damgalı işlemlerin her zaman yeniden çalıştırılmasını önlemek için Bazel, değişken dosyanın hiçbir zaman değişmediğini iddia eder. Bir başka deyişle, içeriği değişen tek dosya değişken durum dosyasıysa Bazel buna bağlı işlemleri geçersiz kılmaz. İşlemlerin diğer girişleri değiştiyse Bazel bu işlemi yeniden çalıştırır ve işlem, güncellenmiş değişken durumu görür ancak yalnızca değişken durumunun tek başına değiştirilmesi işlemi geçersiz kılmaz.

    Bazel her zaman aşağıdaki değişken anahtarları oluşturur:

    • BUILD_TIMESTAMP: Unix Epoch'tan itibaren derleme süresi (System.currentTimeMillis() değerinin bine bölümü)
    • FORMATTED_DATE: Derlemenin şu şekilde biçimlendirilmiş zamanı: yyyy MMM d HH mm ss EEE(örneğin, 2023 Haziran 2023 44 29 Cuma).

Linux/macOS'te, true hiçbir şey yapmadığından (sıfır ile çıkış yapar) ve hiçbir çıkış yazdırmadığından, çalışma alanı durumunu almayı devre dışı bırakmak için --workspace_status_command=/bin/true değerini iletebilirsiniz. Windows'da, aynı etki için MSYS'nin true.exe yolunu aktarabilirsiniz.

Çalışma alanı durum komutu herhangi bir nedenle başarısız olursa (sıfır olmayan bir şekilde çıkar) derleme başarısız olur.

Linux'ta Git kullanan örnek program:

#!/bin/bash
echo "CURRENT_TIME $(date +%s)"
echo "RANDOM_HASH $(cat /proc/sys/kernel/random/uuid)"
echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)"
echo "STABLE_USER_NAME $USER"

Bu programın yolunu --workspace_status_command ile geçirin. Kararlı durum dosyası STABLE satırlarını, değişken durum dosyası ise kalan satırları içerir.

--[no]stamp

Bu seçenek, stamp kural özelliğiyle birlikte, derleme bilgilerinin ikili programlara yerleştirilip yerleştirilmeyeceğini kontrol eder.

Damgalama, stamp özelliği kullanılarak kural bazında açıkça etkinleştirilebilir veya devre dışı bırakılabilir. Ayrıntılar için lütfen Yapı Ansiklopedisi'ne bakın. Bir kural stamp = -1 (*_binary kuralları için varsayılan) ayarladığında bu seçenek, damgalamanın etkin olup olmadığını belirler.

Bazel, bu seçenek veya stamp özelliği ne olursa olsun, exec yapılandırması için oluşturulan ikili programları hiçbir zaman damgalamaz. stamp = 0 politikasını (*_test kuralları için varsayılan) ayarlayan kurallarda damgalama --[no]stamp bağımsız olarak devre dışı bırakılır. --stamp belirtilmesi, bağımlılıkları değişmemişse hedefleri yeniden oluşturulmaya zorlamaz.

Giriş dalgalanmasını azalttığı ve derlemenin önbelleğe alınmasını en üst düzeye çıkardığı için --nostamp ayarlanması genellikle derleme performansı için tercih edilir.

Platform

Derlemelerin çalışma şeklini yapılandıran ana makine ve hedef platformları kontrol etmek ve Bazel kurallarının hangi yürütme platformları ile araç zincirlerini kullanabileceğini kontrol etmek için bu seçenekleri kullanın.

Lütfen Platformlar ve Araç Zincirleri ile ilgili arka plan bilgilerine bakın.

--platforms=labels

Geçerli komut için hedef platformları açıklayan platform kurallarının etiketleridir.

--host_platform=label

Ana makine sistemini açıklayan platform kuralının etiketi.

--extra_execution_platforms=labels

İşlem çalıştırmak için yürütme platformu olarak kullanılabilen platformlar. Platformlar, tam hedefle veya hedef kalıbı olarak belirtilebilir. Bu platformlar, WORKSPACE dosyasında register_execution_platforms() tarafından belirtilenlerden önce dikkate alınır. Bu seçenek, öncelik sırasına göre platformların virgülle ayrılmış listesini kabul eder. İşaret birden çok kez geçirilirse en son geçersiz kılmalar.

--extra_toolchains=labels

Araç zinciri çözümü sırasında dikkate alınacak araç zinciri kuralları. Araç zincirleri, tam hedefe göre veya hedef kalıp olarak belirtilebilir. Bu araç zincirleri, WORKSPACE dosyasında register_toolchains() tarafından belirtilenlerden önce dikkate alınır.

--toolchain_resolution_debug=regex

Araç zinciri türü, normal ifadeyle eşleşiyorsa araç zincirlerini bulurken hata ayıklama bilgilerini yazdırın. Birden fazla normal ifade virgülle ayrılabilir. Normal ifade, başlangıçta - kullanılarak ters çevrilebilir. Bu, Bazel veya Starlark kurallarının geliştiricilerinin, araç zincirlerinin bulunmamasından kaynaklanan hata ayıklama hataları konusunda yardımcı olabilir.

Çeşitli

--flag_alias=alias_name=target_path

Uzun Starlark derleme ayarlarını daha kısa bir ada bağlamak için kullanılan kolaylık işareti. Daha fazla bilgi için Starlark Configurations sayfasına bakın.

Oluşturulan kolaylık sembollerinin önekini değiştirir. Sembolik bağlantı ön eki için varsayılan değer bazel- değeridir. Bu değer bazel-bin, bazel-testlogs ve bazel-genfiles sembollerini oluşturur.

Sembolik bağlantılar herhangi bir nedenle oluşturulamazsa uyarı verilir ancak derleme yine de başarılı olarak kabul edilir. Özellikle bu, salt okunur bir dizinde veya yazma izninizin olmadığı bir dizinde derlemenize olanak tanır. Bir derlemenin sonundaki bilgi mesajlarında yazdırılan tüm yollar, yalnızca sembolik bağlantılar beklenen konumu gösteriyorsa sembolik bağlantıya göre kısa biçimi kullanır. Diğer bir deyişle, oluşturulan sembolik bağlantılara güvenemeseniz bile bu yolların doğruluğuna güvenebilirsiniz.

Bu seçeneğin yaygın olarak kullanılan değerlerinden bazıları şunlardır:

  • Sembolik bağlantı oluşturmayı gizle: --symlink_prefix=/, Bazel'ın bazel-out ve bazel-<workspace> sembolleri de dahil olmak üzere sembolik bağlantıları oluşturmamasına veya güncellememesine neden olur. Sembolik bağlantı oluşturulmasını tamamen engellemek için bu seçeneği kullanın.

  • Karmaşıklığı azaltın: --symlink_prefix=.bazel/, Bazel'ın .bazel gizli bir dizin içinde bin (vb.) adlı sembolik bağlantılar oluşturmasına neden olur.

--platform_suffix=string

Yapılandırma kısa adına, çıkış dizinini belirlemek için kullanılan bir sonek ekler. Bu seçeneğin farklı değerlere ayarlanması, dosyaları farklı dizinlere yerleştirir. Örneğin, birbirlerinin çıkış dosyalarını bozan derlemeler için önbellek isabet oranlarını iyileştirmek veya çıkış dosyalarını karşılaştırma için bir yerde tutmak amacıyla dosyalar farklı dizinlere yerleştirilir.

--default_visibility=(private|public)

Bazel varsayılan görünürlük değişikliklerini test etmek için geçici işaret. Genel kullanıma yönelik değildir, ancak eksiksiz olması için belgelenmiştir.

--starlark_cpu_profile=_file_

Değeri bir dosya adı olan bu işaret, Bazel'in tüm Starlark iş parçacıkları tarafından CPU kullanımıyla ilgili istatistikler toplamasına ve profili adlandırılmış dosyaya pprof biçiminde yazmasına neden olur.

Aşırı hesaplamadan dolayı yüklemeyi ve analizi yavaşlatan Starlark işlevlerinin tanımlanması için bu seçeneği kullanın. Örneğin:

$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/...
$ pprof /tmp/pprof.gz
(pprof) top
Type: CPU
Time: Feb 6, 2020 at 12:06pm (PST)
Duration: 5.26s, Total samples = 3.34s (63.55%)
Showing nodes accounting for 3.34s, 100% of 3.34s total
      flat  flat%   sum%        cum   cum%
     1.86s 55.69% 55.69%      1.86s 55.69%  sort_source_files
     1.02s 30.54% 86.23%      1.02s 30.54%  expand_all_combinations
     0.44s 13.17% 99.40%      0.44s 13.17%  range
     0.02s   0.6%   100%      3.34s   100%  sorted
         0     0%   100%      1.38s 41.32%  my/project/main/BUILD
         0     0%   100%      1.96s 58.68%  my/project/library.bzl
         0     0%   100%      3.34s   100%  main

Aynı verilerin farklı görünümleri için pprof komutlarının svg, web ve list komutlarını kullanmayı deneyin.

Sürümler için Bazel kullanma

Bazel, hem geliştirme döngüsü sırasında yazılım mühendisleri tarafından hem de üretime yönelik ikili programları hazırlarken yayın mühendisleri tarafından kullanılır. Bu bölümde Bazel kullanan yayın mühendislerine yönelik ipuçlarının listesi yer almaktadır.

Önemli seçenekler

Sürüm derlemeleri için Bazel kullanılırken derleme gerçekleştiren diğer komut dosyalarıyla aynı sorunlar ortaya çıkar. Daha fazla bilgi için Komut dosyalarından Bazel'ı arama bölümüne bakın. Özellikle aşağıdaki seçenekler önemle tavsiye edilir:

Şu seçenekler de önemlidir:

  • --package_path
  • --symlink_prefix: Birden fazla yapılandırmaya yönelik derlemeleri yönetmek için her derlemeyi "64 bit" ve "32 bit" gibi ayrı bir tanımlayıcıyla ayırt etmek kolay olabilir. Bu seçenek, bazel-bin (vb.) sembolik bağlantılarını farklı kılar.

Test çalıştırma

Bazel ile test oluşturmak ve çalıştırmak için bazel test yazıp ardından test hedeflerinin adını yazın.

Varsayılan olarak bu komut, eş zamanlı derleme ve test etkinliği gerçekleştirir, belirtilen tüm hedefleri (komut satırında belirtilen test dışı hedefler dahil) oluşturur ve *_test ve test_suite hedeflerini önkoşulları yerine getirildikten sonra test eder. Diğer bir deyişle, test yürütme işlemi binaya araya eklenir. Bu yöntem genellikle önemli hız kazanımları sağlar.

bazel test için seçenekler

--cache_test_results=(yes|no|auto) (-t)

Bu seçenek "otomatik" (varsayılan) değerine ayarlanırsa Bazel yalnızca aşağıdaki koşullardan herhangi birinin geçerli olması durumunda testi tekrar çalıştırır:

  • Bazel, testteki veya bağımlılıklarındaki değişiklikleri tespit eder
  • test external olarak işaretlenir
  • --runs_per_test ile birden fazla test çalıştırması istendi
  • test başarısız oldu.

"Hayır" ise tüm testler koşulsuz olarak yürütülür.

"Evet" ise önbelleğe alma davranışı otomatik ile aynı olur, ancak test hatalarını önbelleğe alabilir ve --runs_per_test ile test çalıştırabilirsiniz.

.bazelrc dosyalarında bu seçeneği varsayılan olarak etkinleştiren kullanıcılar, belirli bir çalıştırmada -t (açık) veya -t- (kapalı) kısaltmalarını, belirli bir çalıştırmada varsayılanı geçersiz kılmak için kullanışlı bulabilir.

--check_tests_up_to_date

Bu seçenek Bazel'a testleri çalıştırmamasını, yalnızca önbelleğe alınan test sonuçlarını kontrol edip bildirmesini söyler. Daha önce derlenip çalıştırılmayan veya test sonuçları güncel olmayan (örneğin, kaynak kodu ya da derleme seçenekleri değiştiği için) testler varsa Bazel bir hata mesajı ("test sonucu güncel değil") bildirir, testin durumunu "DURUM YOK" (renkli çıktı etkinleştirilmişse kırmızı renkte) olarak kaydeder ve çıkış kodu sıfır dışında bir kod döndürür.

Bu seçenek, [--check_up_to_date](#check-up-to-date) davranışını da gösterir.

Bu seçenek, yayın öncesi kontroller için kullanışlı olabilir.

--test_verbose_timeout_warnings

Bu seçenek, bir testin zaman aşımı testin gerçek yürütme süresinden önemli ölçüde daha uzun olursa Bazel'a kullanıcıyı açıkça uyarmasını bildirir. Bir testin zaman aşımının stabil olmayacak şekilde ayarlanması gerekirken, çok fazla zaman aşımı olan bir test beklenmedik şekilde ortaya çıkan gerçek sorunları gizleyebilir.

Örneğin, normalde bir veya iki dakika içinde yürütülen bir test, çok ama çok fazla cömert oldukları için ETERNAL veya UZUN zaman aşımı olmaması gerekir.

Bu seçenek, kullanıcıların iyi bir zaman aşımı değerine karar vermelerine veya mevcut zaman aşımı değerlerini kontrol etmelerine yardımcı olur.

--[no]test_keep_going

Varsayılan olarak tüm testler sonuna kadar çalıştırılır. Ancak bu işaret devre dışı bırakılırsa derleme, başarısız olmayan testlerde iptal edilir. Sonraki derleme adımları ve test çağrıları çalışmaz ve hazırlık aşamasındaki çağrılar iptal edilir. Hem --notest_keep_going hem de --keep_going değerini belirtmeyin.

--flaky_test_attempts=attempts

Bu seçenek, herhangi bir nedenle başarısız olan bir testin maksimum kaç kez denenmesi gerektiğini belirtir. Başlangıçta başarısız olan ancak sonunda başarılı olan bir test, test özetinde FLAKY olarak raporlanır. Bununla birlikte, Bazel çıkış kodunun veya geçilen testlerin toplam sayısının belirlenmesi söz konusu olduğunda bu değerin geçtiği kabul edilir. İzin verilen tüm girişimlerde başarısız olan testler başarısız olarak kabul edilir.

Varsayılan olarak (bu seçenek belirtilmezse veya varsayılan olarak ayarlandığında), normal testler için yalnızca bir denemeye ve flaky özelliği ayarlanmış test kuralları için 3 denemeye izin verilir. Maksimum test denemesi sınırını geçersiz kılmak için bir tam sayı değeri belirtebilirsiniz. Bazel, sistemin kötüye kullanılmasını önlemek için en fazla 10 test girişimine izin verir.

--runs_per_test=[regex@]number

Bu seçenek her bir testin kaç kez yürütülmesi gerektiğini belirtir. Tüm test yürütmeleri ayrı testler olarak ele alınır (yedek işlev her birine bağımsız olarak uygulanır).

Başarısız çalıştırmaları olan bir hedefin durumu, --runs_per_test_detects_flakes işaretinin değerine bağlıdır:

  • Aksi takdirde, başarısız çalıştırmalar tüm testin başarısız olmasına neden olur.
  • Varsa ve aynı parçadan iki çalıştırma Başarılı ve BAŞARISIZ olursa test, güvenilir olmayan bir durum alır (başka başarısız çalıştırmalar başarısız olmasına neden olmadığı sürece).

Tek bir sayı belirtilirse tüm testler o sayıda tekrarlar. Alternatif olarak, regex@number söz dizimi kullanılarak normal ifade belirtilebilir. Bu, --runs_per_test etkisini normal ifadeyle eşleşen hedeflerle kısıtlar (--runs_per_test=^//pizza:.*@4, tüm testleri //pizza/ altında 4 kez çalıştırır). Bu --runs_per_test biçimi bir kereden fazla belirtilebilir.

--[no]runs_per_test_detects_flakes

Bu seçenek belirtilirse (varsayılan olarak belirtilmezse) Bazel, --runs_per_test boyunca stabil olmayan test parçalarını algılar. Bir veya daha fazla tek parça başarısızlığı için çalışırsa ve bir veya daha fazla aynı parça geçişi için çalışırsa hedef, bayrakla birlikte stabil olarak kabul edilir. Belirtilmemişse hedef, bir başarısızlık durumu bildirir.

--test_summary=output_style

Test sonucu özetinin nasıl görüntülenmesi gerektiğini belirtir.

  • short, her testin sonuçlarını, test başarısız olduysa test çıkışını içeren dosyanın adıyla birlikte yazdırır. Bu, varsayılan değerdir.
  • terse, short benzeri, ancak daha da kısadır: Yalnızca geçemeyen testlerle ilgili bilgileri yazdırın.
  • detailed, yalnızca her testi değil, başarısız olan her bir test durumunu yazdırır. Test çıkış dosyalarının adları atlanır.
  • none, test özetini yazdırmaz.

--test_output=output_style

Test çıkışının nasıl görüntüleneceğini belirtir:

  • summary, her testin başarılı olup olmadığını belirten bir özet gösterir. Ayrıca, başarısız testler için çıkış günlüğü dosyasının adını gösterir. Özet, derlemenin sonunda yazdırılır (Derleme sırasında testler başladığında, başarılı olunduğunda veya başarısız olduğunda sadece basit ilerleme mesajları gösterilir). Bu, varsayılan davranıştır.
  • errors, başarısız testlerden birleşik stdout/stderr çıkışını yalnızca test tamamlandıktan hemen sonra stdout'a gönderir ve böylece eş zamanlı testlerden elde edilen test çıktısının birbiriyle aralıklı olmasını önler. Derlemede yukarıdaki özet çıkışına göre bir özet yazdırır.
  • all, errors işlevine benzer ancak başarılı olanlar da dahil olmak üzere tüm testlerin çıktısını yazdırır.
  • streamed, her testten gerçek zamanlı olarak stdout/stderr çıkışı akışı gerçekleştirir.

--java_debug

Bu seçenek, bir Java testinin Java sanal makinesinin, testi başlatmadan önce JDWP uyumlu bir hata ayıklayıcıdan bağlantı beklemesine neden olur. Bu seçenek, --test_output=streamed anlamına gelir.

--[no]verbose_test_summary

Bu seçenek varsayılan olarak etkindir ve test sürelerinin ve diğer ek bilgilerin (test denemeleri gibi) test özetine yazdırılmasına neden olur. --noverbose_test_summary belirtilirse test özeti yalnızca test adını, test durumunu ve önbelleğe alınmış test göstergesini içerir ve mümkün olduğunda 80 karakter içinde kalacak şekilde biçimlendirilir.

--test_tmpdir=path

Yerel olarak yürütülen testler için geçici dizini belirtir. Her test, bu dizin içinde ayrı bir alt dizinde yürütülür. Dizin, her bazel test komutunun başında temizlenir. Bazel varsayılan olarak bu dizini Bazel çıktı temel dizininin altına yerleştirir.

--test_timeout=seconds VEYA --test_timeout=seconds,seconds,seconds,seconds

Belirtilen saniye sayısını yeni bir zaman aşımı değeri olarak kullanarak tüm testler için zaman aşımı değerini geçersiz kılar. Tek bir değer sağlanırsa tüm test zaman aşımı kategorileri için bu değer kullanılır.

Alternatif olarak kısa, orta, uzun ve sonsuz testler (bu sırayla) için ayrı ayrı zaman aşımları belirten, virgülle ayrılmış dört değer sağlanabilir. Her iki biçimde de, test boyutlarından herhangi biri için sıfır veya negatif bir değer, Testleri Yazma sayfasında tanımlandığı şekilde belirtilen zaman aşımı kategorileri için varsayılan zaman aşımı ile değiştirilir. Varsayılan olarak Bazel, zaman aşımı sınırını testin boyutundan, boyutun dolaylı veya açık olarak ayarlanmış olmasından yola çıkarak tüm testler için kullanır.

Zaman aşımı kategorisinin boyutlarından farklı olduğunu açıkça belirten testler, söz konusu zaman aşımının boyut etiketi tarafından dolaylı olarak ayarlandığı durumlarda aynı değeri alır. Dolayısıyla, "uzun" zaman aşımı bildiren "küçük" boyutlu bir test, "büyük" testlerle aynı etkili zaman aşımına ve açık bir zaman aşımı olmayan testlere sahiptir.

--test_arg=arg

Her test işlemine komut satırı seçeneklerini/işaretlerini/bağımsız değişkenlerini iletir. Bu seçenek, birkaç bağımsız değişken iletmek için birden fazla kez kullanılabilir. Örneğin, --test_arg=--logtostderr --test_arg=--v=3.

bazel run komutunun aksine, test bağımsız değişkenlerini doğrudan bazel test -- target --logtostderr --v=3 içinde iletemeyeceğinizi unutmayın. Bunun nedeni, bazel test öğesine iletilen harici bağımsız değişkenlerin ek test hedefleri olarak yorumlanmasıdır. Yani hem --logtostderr hem de --v=3 birer test hedefi olarak yorumlanır. Bu belirsizlik, yalnızca bir hedefi kabul eden bazel run komutu için mevcut değildir.

--test_arg, bazel run komutuna geçirilebilir ancak çalıştırılmakta olan hedef bir test hedefi olmadığı sürece yoksayılır. (Diğer tüm işaretlerde olduğu gibi bazel run komutunda -- jetonundan sonra geçirilirse Bazel tarafından işlenmez ancak yürütülen hedefe tam olarak yönlendirilir.)

--test_env=variable=_value_ VEYA --test_env=variable

Her test için test ortamına eklenmesi gereken ek değişkenleri belirtir. value belirtilmezse bazel test komutunu başlatmak için kullanılan kabuk ortamından devralınır.

Ortama, System.getenv("var") (Java), getenv("var") (C veya C++),

--run_under=command-prefix

Bu, test çalıştırıcının çalıştırmadan önce test komutunun önüne yerleştireceği bir ön eki belirtir. command-prefix, Bourne kabuk şifrelendirme kuralları kullanılarak kelimelere ayrılır ve ardından yürütülecek komutun başına kelime listesi eklenir.

İlk kelime tam nitelikli bir etiketse (// ile başlar) derlenir. Ardından etiket, diğer kelimelerle birlikte yürütülecek komutun başına eklenen karşılık gelen yürütülebilir konumla değiştirilir.

Dikkat edilmesi gereken bazı noktalar vardır:

  • Testleri çalıştırmak için kullanılan PATH, ortamınızdaki PATH'den farklı olabilir. Bu nedenle, --run_under komutu (command-prefix ifadesinin ilk kelimesi) için bir mutlak yol kullanmanız gerekebilir.
  • stdin bağlı olmadığından --run_under etkileşimli komutlar için kullanılamaz.

Örnekler:

        --run_under=/usr/bin/strace
        --run_under='/usr/bin/strace -c'
        --run_under=/usr/bin/valgrind
        --run_under='/usr/bin/valgrind --quiet --num-callers=20'

Seçimi test et

Çıkış seçimi seçenekleri bölümünde belirtildiği gibi, testleri boyut, zaman aşımı, etiket veya dile göre filtreleyebilirsiniz. Kolaylık sağlayan bir genel ad filtresi, belirli filtre bağımsız değişkenlerini test çalıştırıcısına yönlendirebilir.

bazel test için diğer seçenekler

Söz dizimi ve geri kalan seçenekler bazel build ile aynıdır.

Yürütülebilir dosyaları çalıştırma

bazel run komutu, tek bir hedef ve çalıştırmak için kullanılması dışında bazel build komutuna benzer. Tipik bir oturum aşağıdaki gibidir:

  % bazel run java/myapp:myapp -- --arg1 --arg2
  Welcome to Bazel
  INFO: Loading package: java/myapp
  INFO: Loading package: foo/bar
  INFO: Loading complete.  Analyzing...
  INFO: Found 1 target...
  ...
  Target //java/myapp:myapp up-to-date:
    bazel-bin/java/myapp:myapp
  INFO: Elapsed time: 0.638s, Critical Path: 0.34s

  INFO: Running command line: bazel-bin/java/myapp:myapp --arg1 --arg2
  Hello there
  $EXEC_ROOT/java/myapp/myapp
  --arg1
  --arg2

bazel run, Bazel tarafından oluşturulan ikili programın doğrudan çağrılmasına benzer ancak aynı değildir. Bu ikili programın davranışı, çağrılacak ikili programın test olup olmadığına bağlı olarak farklılık gösterir.

İkili program bir test değilse geçerli çalışma dizini, ikili programın runfiles ağacı olur.

İkili program bir test olduğunda mevcut çalışma dizini, exec root' olur ve genellikle çalıştırılan ortam testlerini kopyalamak için iyi niyetli bir girişimde bulunulur. Bununla birlikte emülasyon mükemmel değildir ve birden fazla parçaya sahip testler bu şekilde çalıştırılamaz (Bu sorunu gidermek için --test_sharding_strategy=disabled komut satırı seçeneği kullanılabilir)

İkili program için aşağıdaki ek ortam değişkenleri de kullanılabilir:

  • BUILD_WORKSPACE_DIRECTORY: Derlemenin çalıştırıldığı çalışma alanının kökü.
  • BUILD_WORKING_DIRECTORY: Bazel'ın çalıştırıldığı mevcut çalışma dizini.

Örneğin, bunlar komut satırındaki dosya adlarını kullanıcı dostu bir şekilde yorumlamak için kullanılabilir.

bazel run için seçenekler

--run_under=command-prefix

Bu, bazel test için çalıştırılan testler yerine bazel run tarafından çalıştırılan komut için geçerli olması ve etiket altında çalıştırılamaması dışında bazel test için --run_under seçeneğiyle aynı etkiye sahiptir (yukarıya bakın).

Bazel'den günlük çıkışlarını filtreleme

bazel run ile bir ikili program çağrılırken Bazel, Bazel'ın kendisinden ve çağrılan ikili programdan günlük kaydı çıktısını yazdırır. Günlüklerdeki gürültüyü azaltmak için --ui_event_filters ve --noshow_progress işaretlerini kullanarak Bazel'in kendisinden gelen çıkışları gizleyebilirsiniz.

Örneğin: bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp

Testleri yürütme

bazel run, test ikili programlarını da yürütebilir. Bu da testi, Testleri Yazma bölümünde açıklanan ortama daha yakın bir şekilde çalıştırma etkisine sahiptir. Bu şekilde bir test çalıştırırken --test_* bağımsız değişkenlerinin --test_arg dışında hiçbir etkisi olmadığını unutmayın .

Derleme çıkışlarını temizleme

clean komutu

Bazel'ın, Make komutuna benzer bir clean komutu vardır. Bu Bazel örneği tarafından gerçekleştirilen tüm derleme yapılandırmalarının veya bu Bazel örneği tarafından oluşturulan çalışma ağacının tamamının çıkış dizinlerini siler ve dahili önbellekleri sıfırlar. Herhangi bir komut satırı seçeneği olmadan yürütülürse tüm yapılandırmalar için çıkış dizini temizlenir.

Her Bazel örneğinin tek bir çalışma alanıyla ilişkilendirildiğini, dolayısıyla clean komutunun söz konusu çalışma alanındaki Bazel örneğiyle yaptığınız tüm derlemelerdeki tüm çıkışları sileceğini unutmayın.

Bir Bazel örneği tarafından oluşturulan çalışma ağacının tamamını tamamen kaldırmak için --expunge seçeneğini belirleyebilirsiniz. --expunge ile çalıştırıldığında, temiz komutu yalnızca çıkış tabanı ağacının tamamını kaldırır. Bu ağ, derleme çıkışının yanı sıra Bazel tarafından oluşturulan tüm geçici dosyaları da içerir. Ayrıca shutdown komutuna eşdeğer olan temizlik işleminin ardından Bazel sunucusunu durdurur. Örneğin, bir Bazel örneğinin tüm disk ve bellek izlerini temizlemek için aşağıdakileri belirtebilirsiniz:

  % bazel clean --expunge

Alternatif olarak, --expunge_async kullanarak arka planda kalıcı olarak silebilirsiniz. Eşzamansız silme işlemi çalışmaya devam ederken aynı istemcide bir Bazel komutu çağırmak güvenlidir.

clean komutu, esasen artık ihtiyaç duyulmayan çalışma alanları için disk alanı geri kazanılması amacıyla kullanılır. Bazel'ın artımlı yeniden derlemeleri mükemmel olmayabilir. Bu nedenle, sorunlar ortaya çıktığında tutarlı bir durumu kurtarmak için clean kullanılabilir.

Bazel'ın tasarımı, bu sorunların düzeltilebileceği ve bu hataların giderilmesi yüksek önceliğe sahip. Yanlış bir artımlı derleme bulursanız clean öğesini kullanmak yerine araçlarda hata raporu gönderin ve hataları bildirin.

Bağımlılık grafiğini sorgulama

Bazel, derleme sırasında kullanılan bağımlılık grafiği hakkında sorular sormak için bir sorgu dili ekler. Sorgu dili iki komut tarafından kullanılır: query ve cquery. İki komut arasındaki en önemli fark, sorgunun yükleme aşamasından ve cquery'nin analiz aşamasından sonra çalıştırılmasıdır. Bu araçlar, birçok yazılım mühendisliği görevi için kıymetli bir yardımcıdır.

Sorgu dili, grafikler yerine cebirsel işlemler fikrine dayalıdır.

Bazel Sorgu Referansı. Örnekler için ve sorguya özel komut satırı seçenekleri için lütfen söz konusu dokümana bakın.

Sorgu aracı birkaç komut satırı seçeneğini kabul eder. --output, çıkış biçimini seçer. --[no]keep_going (varsayılan olarak devre dışıdır), sorgu aracının hatalar durumunda ilerleme kaydetmeye devam etmesine neden olur. Hata olması halinde eksik sonuç kabul edilemezse bu davranış devre dışı bırakılabilir.

Varsayılan olarak etkinleştirilen --[no]tool_deps seçeneği, hedef olmayan yapılandırmalardaki bağımlılıkların sorgunun çalıştığı bağımlılık grafiğine eklenmesine neden olur.

Varsayılan olarak etkinleştirilen --[no]implicit_deps seçeneği, sorgunun çalıştığı bağımlılık grafiğine örtülü bağımlılıkların eklenmesine neden olur. Örtülü bağımlılık, BUILD dosyasında açıkça belirtilmeyen ancak Bazel tarafından eklenen bir bağımlılıktır.

Örnek: "PEBL ağacındaki tüm testleri oluşturmak için gereken tüm kuralların (DERLEME dosyalarında) konumlarını gösterin."

  bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'

Eylem grafiğini sorgulama

aquery komutu, derleme grafiğinizdeki işlemleri sorgulamanıza olanak tanır. Analiz sonrası yapılandırılmış hedef grafiği üzerinde çalışarak eylemler, eserler ve bunların ilişkileri hakkında bilgiler sunar.

Araç, çeşitli komut satırı seçeneklerini kabul eder. --output, çıkış biçimini seçer. Varsayılan çıkış biçimi (text) kullanıcılar tarafından okunabilir. Makine tarafından okunabilir biçim için proto veya textproto kullanın. Özellikle, sorgu komutu normal bir Bazel derlemesinin üzerinde çalışır ve bir derleme sırasında mevcut olan bir dizi seçeneği devralır.

Geleneksel query için de kullanılabilen ancak siblings, buildfiles ve tests için de kullanılabilen aynı işlev grubunu destekler.

Daha fazla bilgi için İşlem Grafiği Sorgusu bölümüne bakın.

Çeşitli komutlar ve seçenekler

help

help komutu, çevrimiçi yardım sağlar. Varsayılan olarak Bazel ile derleme bölümünde gösterildiği gibi, kullanılabilir komutların ve yardım konularının bir özetini gösterir. Bağımsız değişken belirlemek, belirli bir konuyla ilgili ayrıntılı yardımı gösterir. Çoğu konu build veya query gibi Bazel komutlarıdır ancak komutlara karşılık gelmeyen bazı ek yardım konuları da vardır.

--[no]long (-l)

Varsayılan olarak bazel help [topic], bir konuyla ilgili yalnızca alakalı seçeneklerin bir özetini yazdırır. --long seçeneği belirtilirse her bir seçeneğin türü, varsayılan değeri ve tam açıklaması da yazdırılır.

shutdown

Bazel sunucu işlemleri shutdown komutu kullanılarak durdurulabilir. Bu komut, Bazel sunucusunun boşta kaldığında (örneğin, devam eden derlemeler veya devam eden diğer komutlar tamamlandıktan sonra) çıkmasına neden olur. Daha fazla bilgi için İstemci/sunucu uygulaması bölümüne bakın.

Bazel sunucuları boşta kalma zaman aşımı sonrasında kendilerini durdurur. Bu nedenle bu komut nadiren gereklidir. Ancak belirli bir çalışma alanında başka derleme gerçekleşmeyeceğinin bilindiği durumlarda komut dosyalarında yararlı olabilir.

shutdown, tam sayı bağımsız değişkeni gerektiren (MB cinsinden) --iff_heap_size_greater_than _n_ seçeneğini kabul eder. Bu değer belirtilirse kapatma işlemi, kullanılan bellek miktarına göre koşullu hale gelir. Bazel sunucusundaki herhangi bir bellek sızıntısı, sunucunun belirli aralıklarla kilitlenmesine neden olabileceğinden bu, çok sayıda derleme başlatan komut dosyaları için kullanışlıdır. Koşullu yeniden başlatma işlemi, bu durumu önler.

info

info komutu, Bazel sunucu örneğiyle veya belirli bir derleme yapılandırmasıyla ilişkili çeşitli değerleri yazdırır. (Bunlar, derlemeyi yönlendiren komut dosyaları tarafından kullanılabilir.)

info komutu, aşağıdaki listede bulunan anahtarlardan birinin adı olan tek bir (isteğe bağlı) bağımsız değişkene de izin verir. Bu durumda, bazel info key yalnızca ilgili anahtarın değerini yazdırır. (Bu, özellikle Bazel komut dosyası yazılırken sonucu sed -ne /key:/s/key://p üzerinden atlama gereksinimini ortadan kaldırdığından kullanışlıdır:

Yapılandırmadan bağımsız veriler

  • release: Bu Bazel örneğinin sürüm etiketi veya yayınlanan bir ikili değilse "geliştirme sürümü".
  • workspace, temel çalışma alanı dizininin mutlak yolunu belirtir.
  • install_base: Geçerli kullanıcı için bu Bazel örneği tarafından kullanılan yükleme dizininin mutlak yolu. Bazel, dahili olarak gerekli yürütülebilir dosyalarını bu dizinin altına yükler.

  • output_base: Bu Bazel örneği tarafından geçerli kullanıcı ve çalışma alanı kombinasyonu için kullanılan temel çıkış dizinine giden mutlak yol. Bazel tüm çalışmalarını bu dizinin altına yerleştirir ve çıktıyı bu dizinin altına oluşturur.

  • execution_root: exit_base altındaki yürütme kök dizininin mutlak yolu. Bu dizin, derleme sırasında yürütülen komutların erişebildiği tüm dosyaların kökü ve bu komutların çalışma dizinidir. Çalışma alanı dizini yazılabilirse bu dizini işaret eden bazel-<workspace> adlı bir sembolik bağlantı yerleştirilir.

  • output_path: Tüm dosyalar için kullanılan, derleme komutlarının sonucu olarak oluşturulan yürütme kökünün altındaki çıkış dizinine giden mutlak yol. Çalışma alanı dizini yazılabilirse bu dizini işaret eden bazel-out adlı bir sembolik bağlantı yerleştirilir.

  • server_pid: Bazel sunucu işleminin işlem kimliği.

  • server_log: Bazel sunucusunun hata ayıklama günlük dosyasının mutlak yolu. Bu dosya, Bazel sunucusunun kullanım ömrü boyunca tüm komutlar için hata ayıklama bilgilerini içerir ve Bazel geliştiricileri ile deneyimli kullanıcıların insan tüketimine yöneliktir.

  • command_log: Komut günlük dosyasının mutlak yolu. Bu, en son Bazel komutunun araya eklemeli stdout ve stderr akışlarını içerir. Bu komut en son Bazel komutu olacağından bazel info komutunun çalıştırıldığında bu dosyanın içeriğinin üzerine yazılacağını unutmayın. Ancak --output_base veya --output_user_root seçeneklerinin ayarını değiştirmediğiniz sürece komut günlük dosyasının konumu değişmez.

  • used-heap-size, committed-heap-size, max-heap-size: Çeşitli JVM yığın boyutu parametrelerini raporlar. Sırasıyla: Şu anda kullanılan bellek, şu anda sistemden JVM'ye kullanılabilir bellek ve mümkün olan maksimum ayırma.

  • gc-count, gc-time: Bu Bazel sunucusunun başlangıcından itibaren çöp toplamaların kümülatif sayısı ve bunları gerçekleştirmek için harcanan süre. Bu değerlerin her derlemenin başında sıfırlanmadığını unutmayın.

  • package_path: Paketlerin bazel tarafından aranacağı iki nokta üst üste işaretiyle ayrılmış yol listesi. --package_path derleme komut satırı bağımsız değişkeniyle aynı biçime sahiptir.

Örnek: Bazel sunucusunun işlem kimliği.

% bazel info server_pid
1285

Yapılandırmaya özgü veriler

Bu veriler, bazel info işlevine iletilen yapılandırma seçeneklerinden (ör. --cpu, --compilation_mode) etkilenebilir. Bazıları derlemenin çıkış dizininin konumunu, derleyici seçimini vb. belirlediği için info komutu bağımlılık analizini kontrol eden tüm seçenekleri kabul eder.

  • bazel-bin, bazel-testlogs, bazel-genfiles: Derleme tarafından oluşturulan programların bulunduğu bazel-* dizinlerinin mutlak yolunu bildirir. Bu, her zaman olmasa da genellikle başarılı bir derlemenin ardından temel çalışma alanı dizininde oluşturulan bazel-* sembolik bağlantılarıyla aynı olur. Ancak, Workspace dizini salt okunursa bazel-* sembolü bağlantısı oluşturulamaz. Sembolik bağlantının var olduğunu varsaymak yerine bazel info tarafından bildirilen değeri kullanan komut dosyaları daha sağlam olur.
  • Eksiksiz "Marka" ortamı. --show_make_env işareti belirtilirse mevcut yapılandırmanın "Marka" ortamındaki tüm değişkenler de (CC, GLIBC_VERSION vb.) gösterilir. Bunlar, BUILD dosyalarındaki $(CC) veya varref("CC") söz dizimi kullanılarak erişilen değişkenlerdir.

Örnek: geçerli yapılandırma için C++ derleyici. Bu, "Marka" ortamındaki $(CC) değişkenidir. Bu nedenle --show_make_env işareti gerekir.

  % bazel info --show_make_env -c opt COMPILATION_MODE
  opt

Örnek: Geçerli yapılandırma için bazel-bin çıkış dizini. bazel-bin sembolik bağlantısının herhangi bir nedenle (salt okunur bir dizinden derleme yapıyorsanız) oluşturulamadığı durumlarda bile bu değerin doğru olacağı garanti edilir.

% bazel info --cpu=piii bazel-bin
/var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin
% bazel info --cpu=k8 bazel-bin
/var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin

version ve --version

Sürüm komutu, oluşturulan Bazel ikili programı ile ilgili sürüm ayrıntılarını (oluşturulduğu değişiklik listesi ve tarih dahil) yazdırır. Bunlar özellikle en son Bazel sürümüne sahip olup olmadığınızı veya hataları bildirip bildirmediğinizi belirlemede yararlıdır. İlginç değerlerden bazıları şunlardır:

  • changelist: Bazel'ın bu sürümünün yayınlandığı değişiklik listesi.
  • label: Bu Bazel örneğinin sürüm etiketi veya yayınlanan bir ikili değilse "geliştirme sürümü". Hataları bildirirken çok kullanışlıdır.

Başka bağımsız değişken olmayan bazel --version, bir Bazel sunucusunu başlatma veya sunucu arşivini açma gibi bir yan etki olmaksızın bazel version --gnu_format ile aynı çıkışı yayınlar. bazel --version her yerden çalıştırılabilir, bir çalışma alanı dizini gerektirmez.

mobile-install

mobile-install komutu, uygulamaları mobil cihazlara yükler. Şu anda yalnızca ART çalıştıran Android cihazlar desteklenmektedir.

Daha fazla bilgi için bazel mobil yükleme sayfasına göz atın.

Aşağıdaki seçenekler desteklenir:

--incremental

Ayarlanırsa Bazel uygulamayı aşamalı olarak, yani yalnızca son derlemeden bu yana değişen bölümleri yüklemeye çalışır. Bu işlem, AndroidManifest.xml referanslı kaynakları, yerel kod veya Java kaynaklarını (Class.getResource() tarafından referans verilenler gibi) güncelleyemez. Bu şeyler değişirse bu seçenek atlanmalıdır. Bazel'ın ruhunun aksine ve Android platformunun sınırlamalarından dolayı, bu komutun ne zaman yeterince iyi olduğunu ve tam yüklemenin ne zaman gerekli olduğunu bilmek kullanıcının sorumluluğundadır.

Marshmallow veya sonraki bir sürümün yüklü olduğu bir cihaz kullanıyorsanız --split_apks işaretini kullanabilirsiniz.

--split_apks

Uygulamayı cihaza yüklemek ve güncellemek için bölünmüş apk'lerin kullanılıp kullanılmayacağı. Yalnızca Marshmallow veya sonraki sürümlerin yüklü olduğu cihazlarda çalışır. --split_apks kullanılırken --incremental işaretinin gerekli olmadığını unutmayın.

--start_app

Yükleme sonrasında uygulamayı temiz bir durumda başlatır. --start=COLD etiketine eş değer.

--debug_app

Yükleme sonrasında uygulamayı temiz bir durumda başlatmadan önce hata ayıklayıcının eklenmesini bekler. --start=DEBUG etiketine eş değer.

--start=_start_type_

Uygulamanın yüklendikten sonra başlatılma şekli. Desteklenen _start_type_'lar şunlardır:

  • NO Uygulamayı başlatmaz. Bu varsayılan ayardır.
  • COLD Yükleme işleminden sonra uygulamayı temiz bir durumda başlatır.
  • WARM Artımlı yüklemelerde uygulama durumunu korur ve geri yükler.
  • DEBUG Uygulamayı yükleme işleminden sonra temiz bir durumda başlatmadan önce hata ayıklayıcının tamamlanmasını bekler.

--adb=path

Kullanılacak adb ikili programını belirtir.

Varsayılan olarak adb, --android_sdk tarafından belirtilen Android SDK'sında kullanılır.

--adb_arg=serial

adb için ekstra bağımsız değişkenler. Bunlar, komut satırındaki alt komuttan önce gelir ve genellikle hangi cihaza yükleneceklerini belirtmek için kullanılır. Örneğin, kullanılacak Android cihazı veya emülatörü seçmek için:

% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef

adb işlevini şu şekilde çağırır:

adb -s deadbeef install ...

--incremental_install_verbosity=number

Artımlı yükleme ayrıntısı. Hata ayıklama günlük kaydının konsola yazdırılması için değeri 1 olarak ayarlayın.

dump

dump komutu, Bazel sunucusunun dahili durumunun bir dökümünü stdout'a basmak için yazdırılır. Bu komut temel olarak Bazel geliştiricilerinin kullanması için tasarlanmıştır. Bu nedenle bu komutun çıkışı belirtilmemiştir ve değiştirilebilir.

Varsayılan olarak, komut yalnızca Bazel durumunun belirli alanlarına döküm çıkarmayla ilgili olası seçenekleri özetleyen yardım mesajını yazdırır. Dahili durumun dökümü için en az bir seçenek belirtilmelidir.

Aşağıdaki seçenekler desteklenir:

  • --action_cache, işlem önbelleği içeriğini atar.
  • --packages, paket önbellek içeriğini dökümü yapar.
  • --skyframe, dahili Bazel bağımlılık grafiğinin durumunu döküm halinde veriyor.
  • --rules, her kural ve en boy sınıfı için sayılar ve işlem sayıları dahil olmak üzere kural özetini çıkarır. Buna hem yerel hem de Starlark kuralları dahildir. Bellek izleme etkinse kuralların bellek tüketimi de yazdırılır.
  • --skylark_memory, pprof ile uyumlu bir .gz dosyasını belirtilen yola döküm verir. Bu özelliğin çalışması için bellek izlemeyi etkinleştirmeniz gerekir.

Bellek izleme

Bazı dump komutları bellek izleme gerektirir. Bunu açmak için başlangıç bayraklarını Bazel'e iletmeniz gerekir:

  • --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
  • --host_jvm_args=-DRULE_MEMORY_TRACKER=1

Java aracısı, third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar adresinden Bazel'a kontrol edildi. Bu nedenle, $BAZEL öğesini Bazel deponuzu saklayacağınız yer için ayarladığınızdan emin olun.

Her komut için bu seçenekleri Bazel'a iletmeye devam etmeyi unutmayın. Aksi takdirde sunucu yeniden başlatılır.

Örnek:

    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    build --nobuild <targets>

    # Dump rules
    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    dump --rules

    # Dump Starlark heap and analyze it with pprof
    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    dump --skylark_memory=$HOME/prof.gz
    % pprof -flame $HOME/prof.gz

analyze-profile

analyze-profile komutu, daha önce Bazel çağrısı sırasında toplanan bir JSON iz profilini analiz eder.

canonicalize-flags

Bazel komutu için seçeneklerin listesini alan ve aynı etkiye sahip seçeneklerin listesini döndüren canonicalize-flags komutu. Yeni seçenek listesi standarttır. Örneğin, aynı etkiye sahip iki seçenek listesi aynı yeni listeye standartlaştırılır.

--for_command seçeneği, farklı komutlar arasından seçim yapmak için kullanılabilir. Şu anda yalnızca build ve test desteklenmektedir. Verilen komutun desteklemediği seçenekler hataya neden oluyor.

Örnek olarak:

  % bazel canonicalize-flags -- --config=any_name --test_tag_filters="-lint"
  --config=any_name
  --test_tag_filters=-lint

Başlatma seçenekleri

Bu bölümde açıklanan seçenekler, Bazel sunucusu işleminin kullandığı Java sanal makinesinin başlatılmasını etkiler ve bu seçenekler, söz konusu sunucu tarafından işlenen tüm sonraki komutlara uygulanır. Zaten çalışan bir Bazel sunucusu varsa ve başlatma seçenekleri eşleşmezse sunucu yeniden başlatılır.

Bu bölümde açıklanan tüm seçenekler, --key=value veya --key value söz dizimi kullanılarak belirtilmelidir. Ayrıca bu seçenekler Bazel komutundan önce görünmelidir. Bunları bir .bazelrc dosyasında listelemek için startup --key=value kullanın.

--output_base=dir

Bu seçenek, yazılabilir bir dizin belirtmesi gereken bir path bağımsız değişkeni gerektirir. Bazel, tüm çıktılarını yazmak için bu konumu kullanır. Çıktı tabanı aynı zamanda istemcinin Bazel sunucusunu bulmasını sağlayan anahtardır. Çıkış tabanını değiştirerek komutu işleyecek sunucuyu değiştirirsiniz.

Çıkış tabanı, varsayılan olarak kullanıcının giriş adından ve çalışma alanı dizininin adından (aslında MD5 özeti) türetilir. Bu nedenle normal bir değer şu şekilde görünür: /var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e.

Örneğin:

 OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base
% bazel --output_base ${OUTPUT_BASE}1 build //foo  &  bazel --output_base ${OUTPUT_BASE}2 build //bar

Bu komutta, her biri farklı bir Bazel sunucu örneği kullanan (farklı çıkış tabanları nedeniyle) iki Bazel komutu eş zamanlı olarak çalışır (kabuk &amp; operatörü nedeniyle). Buna karşılık, her iki komutta da varsayılan çıkış tabanı kullanıldıysa her iki istek de aynı sunucuya gönderilir ve bunlar sırayla işlenir: Önce //foo, ardından artımlı //bar derlemesi.

--output_user_root=dir

Çıkış ve yükleme tabanlarının oluşturulduğu kök dizine işaret eder. Dizin ya mevcut olmamalı ya da çağrıyı yapan kullanıcıya ait olmalıdır. Geçmişte, çeşitli kullanıcılar arasında paylaşılan bir dizine işaret etmesine izin veriliyordu, ancak artık izin verilmiyor. 11100 numaralı sorun ele alındıktan sonra bu sayfaya izin verilebilir.

--output_base seçeneği belirtilirse çıkış tabanını hesaplamak için --output_user_root kullanılarak geçersiz kılınır.

Yükleme tabanı konumu, --output_user_root ve Bazel yerleştirilmiş ikili programlarının MD5 kimliğine göre hesaplanır.

Dosya sistemi düzeninizde daha iyi bir konum varsa Bazel'in tüm çıkışları (yükleme tabanı ve çıkış tabanı) için alternatif bir temel konum seçmek üzere --output_user_root seçeneğini kullanabilirsiniz.

--server_javabase=dir

Bazel'in çalıştığı Java sanal makinesini belirtir. Değer, JDK veya JRE içeren dizine giden bir yol olmalıdır. Bu bir etiket olmamalıdır. Bu seçenek herhangi bir Bazel komutundan önce görünmelidir, örneğin:

  % bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo

Bu işaret; uygulamalar, testler, araçlar gibi Bazel alt işlemleri tarafından kullanılan JVM'leri etkilemez. Bunun yerine --javabase veya --host_javabase derleme seçeneklerini kullanın.

Bu işaret, daha önce --host_javabase olarak adlandırılıyordu (bazen "sol taraf" --host_javabase olarak anılıyordu) ancak --host_javabase (bazen "sağ taraf" --host_javabase olarak anılır) derleme işaretiyle karıştırılmasını önlemek için yeniden adlandırıldı.

--host_jvm_args=string

Bazel'in çalıştırıldığı Java sanal makinesine iletilecek başlangıç seçeneğini belirtir. Bu, yığın boyutunu ayarlamak için kullanılabilir. Örneğin:

  % bazel --host_jvm_args="-Xss256K" build //foo

Bu seçenek, tek tek bağımsız değişkenlerle birden çok kez kullanılabilir. Bu işaretin ayarlanmasının nadiren gerekli olduğunu unutmayın. Ayrıca, her biri ayrı bir JVM bağımsız değişkeni olarak yorumlanacak olan boşlukla ayrılmış dize listesini de iletebilirsiniz ancak bu özellik yakında kullanımdan kaldırılacaktır.

Bu durum, Bazel'ın alt işlemleri tarafından kullanılan JVM'leri (uygulamalar, testler, araçlar vb.) etkilemez. JVM seçeneklerini, bazel run tarafından veya komut satırında çalıştırılan yürütülebilir Java programlarına geçirmek için tüm java_binary ve java_test programlarının desteklediği --jvm_flags bağımsız değişkenini kullanmanız gerekir. Testler için alternatif olarak bazel test --test_arg=--jvm_flags=foo ... öğesini kullanın.

--host_jvm_debug

Bu seçenek, Java sanal makinesinin, Bazel'in ana yöntemini çağırmadan önce JDWP uyumlu bir hata ayıklayıcıdan bağlantı kurulmasını beklemesine neden olur. Bu öncelikle Bazel geliştiricilerinin kullanması için tasarlanmıştır.

--autodetect_server_javabase

Bu seçenek, Bazel'ın başlangıçta yüklü bir JDK'yı otomatik olarak aramasına ve yerleştirilmiş JRE yoksa yüklenen JRE'ye geri dönmesine neden olur. --explicit_server_javabase, Bazel'ı birlikte çalıştıracağınız açık bir JRE'yi seçmek için kullanılabilir.

--batch

Toplu işlem modu, Bazel'ın standart istemci/sunucu modunu kullanmamasına neden olur. Bunun yerine tek bir komut için bir bazel Java işlemi çalıştırır. Bu, sinyal işleme, iş denetimi ve ortam değişkeni devralma ile ilgili olarak daha tahmin edilebilir anlamlar için kullanılmış olan ve bir "chroot" hapishanesinde "bazel" çalıştırmak için gereklidir.

Toplu işlem modu, aynı exit_base içinde uygun sıra oluşturma anlamını korur. Yani eş zamanlı çağrılar çakışma olmadan sırayla işlenir. Bazel toplu mod, çalışan bir sunucuya sahip bir istemcide çalıştırılırsa komutu işlemeden önce ilk olarak sunucuyu sonlandırır.

Bazel, toplu modda veya yukarıda açıklanan alternatiflerle daha yavaş çalışır. Bunun nedeni, diğer unsurların yanı sıra derleme dosyası önbelleğinin bellekte yerleşik olması ve sıralı toplu çağrılar arasında korunmamasıdır. Bu nedenle, sürekli derlemeler gibi performansın daha az kritik olduğu durumlarda toplu modun kullanılması genellikle daha mantıklıdır.

--max_idle_secs=n

Bu seçenek, Bazel sunucu işleminin son istemci isteğinden çıkmadan önce ne kadar beklemesi gerektiğini saniye cinsinden belirtir. Varsayılan değer 10800'dür (3 saat). --max_idle_secs=0, Bazel sunucu işleminin süresiz olarak devam etmesine neden olur.

Bu seçenek, başka şekilde çalışmayacakları zaman kullanıcının makinesinde Bazel sunucusu işlemlerini bırakmamalarını sağlamak için Bazel'i çağıran komut dosyaları tarafından kullanılabilir. Örneğin, bir ön gönderme komut dosyası, kullanıcının bekleyen değişikliğinin istenmeyen bağımlılıklara yol açmadığından emin olmak için bazel query yöntemini çağırmak isteyebilir. Bununla birlikte, kullanıcı söz konusu çalışma alanında yakın zamanda bir derleme yapmadıysa, ön gönderme komut dosyasının günün geri kalanında boşta kalması için bir Bazel sunucusu başlatması istenmez. Sorgu isteğinde küçük bir --max_idle_secs değeri belirterek komut dosyası, yeni bir sunucunun başlatılmasına if takdirde sunucudan hemen çıkış yapmasını sağlayabilir. Ancak, halihazırda çalışan bir sunucu varsa bu sunucu, normal süre boyunca boşta kalana kadar çalışmaya devam eder. Elbette, mevcut sunucunun boşta kalma kronometresi sıfırlanır.

--[no]shutdown_on_low_sys_mem

Etkinleştirilirse ve --max_idle_secs pozitif bir süreye ayarlanırsa derleme sunucusu bir süre boşta kaldıktan sonra sistemin belleği yetersiz olduğunda sunucuyu kapatın. Yalnızca Linux.

Derleme sunucusu, max_idle_secs değerine karşılık gelen bir boşta kalma denetimi çalıştırmanın yanı sıra, bir süre boşta kaldıktan sonra kullanılabilir sistem belleğini izlemeye başlar. Kullanılabilir sistem belleği önemli ölçüde azalırsa sunucu kapatılır.

--[no]block_for_lock

Etkinleştirilirse Bazel, ilerlemeden önce sunucu kilidini tutan diğer Bazel komutlarının tamamlanmasını bekler. Devre dışı bırakılırsa Bazel kilidi hemen alamaz ve devam edemezse yanlışlıkla çıkar.

Geliştiriciler, aynı istemcideki başka bir Bazel komutunun neden olduğu uzun beklemeleri önlemek için bunu gönderim öncesi kontrollerinde kullanabilir.

--io_nice_level=n

En iyi çaba KS'si planlaması için 0-7 arasında bir seviye ayarlar. 0 en yüksek önceliği, 7 ise en düşük önceliği temsil eder. Öngörülen planlayıcı yalnızca öncelik 4'e kadar olan değeri kabul edebilir. Negatif değerler yoksayılır.

--batch_cpu_scheduling

Bazel için batch CPU zamanlamasını kullanın. Bu politika, etkileşimli olmayan ancak güzel değerlerini düşürmek istemeyen iş yükleri için yararlıdır. Bkz. "man 2 sched_setscheduler". Bu politika Bazel işleme hızına rağmen daha iyi sistem etkileşimi sağlayabilir.

Diğer seçenekler

--[no]announce_rc

Bazel'ın başlangıçta bazelrc dosyasından okunan komut seçeneklerini anlayıp duyurmayacağını kontrol eder. (Başlatma seçenekleri koşulsuz olarak duyurulur.)

--color (yes|no|auto)

Bu seçenek, Bazel'ın ekrandaki çıktısını vurgulamak için renkleri kullanıp kullanmayacağını belirler.

Bu seçenek yes olarak ayarlanırsa renkli çıktı etkinleştirilir. Bu seçenek auto olarak ayarlanırsa Bazel yalnızca çıkışın bir terminale gönderilmesi ve TERM ortam değişkeninin dumb, emacs veya xterm-mono dışında bir değere ayarlanması durumunda renkli çıktıyı kullanır. Bu seçenek no olarak ayarlanırsa çıkışın bir terminale gidip gitmediğinden ve TERM ortam değişkeninin ayarından bağımsız olarak renk çıkışı devre dışı bırakılır.

--config=name

rc dosyalarından ek yapılandırma bölümünü seçer; mevcut command için böyle bir bölüm varsa command:name'deki seçenekleri de çeker. Birkaç yapılandırma bölümünden işaret eklemek için birden fazla kez belirtilebilir. Genişletmeler diğer tanımlar anlamına gelebilir (örneğin, genişletmeler zincirlenebilir).

--curses (yes|no|auto)

Bu seçenek, Bazel'ın ekran çıkışında imleç kontrollerini kullanıp kullanmayacağını belirler. Böylece, daha az kayan veri sağlanır ve Bazel'den daha kompakt, kolay okunan bir çıkış akışı elde edilir. Bu, --color ile uyumludur.

Bu seçenek yes olarak ayarlanırsa imleç denetimlerinin kullanımı etkinleştirilir. Bu seçenek no olarak ayarlanırsa imleç kontrolleri devre dışı bırakılır. Bu seçenek auto değerine ayarlanırsa imleç denetimlerinin kullanımı, --color=auto ile aynı koşullar altında etkinleştirilir.

--[no]show_timestamps

Belirtilirse, Bazel tarafından oluşturulan her mesaja mesajın görüntülendiği saati belirten bir zaman damgası eklenir.