Komutlar ve Seçenekler

Sorun bildirin 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 bölümündeki Bazel komutlarının listesinin tamamlayıcısı niteliğindedir.

Hedef söz dizimi

build veya test gibi bazı komutlar bir hedef listesinde çalışabilir. Oluşturulacak hedefleri belirtme bölümünde açıklanan, etiketlerden daha esnek bir söz dizimi kullanırlar.

Seçenekler

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

Çoğu seçenek yalnızca bir kez belirtilebilir. Birden fazla 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 paketin BUILD dosyasını bulmak için aranan dizin grubunu belirtir.

Bazel, paket yolunda arama yaparak paketlerini bulur. Bu, her biri kısmi bir kaynak ağacının kökü olan bazel dizinlerinin iki noktayla ayrılmış sıralı 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. Yol, %workspace% ile başlıyorsa en yakın kapanış bazel dizinine göre seçilir. Ö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 tüm değerler çalışma dizinine göre alınır. Genellikle yapmak istediğiniz işlem bu değildir ve bazel çalışma alanının altındaki dizinlerden Bazel kullanıyorsanız beklenmedik şekilde davranabilir. Örneğin, paket yolu öğesini . kullanır ve ardından /home/bob/clients/bob_client/bazel/foo dizinine cd eklerseniz paketler /home/bob/clients/bob_client/bazel/foo dizininden çözümlenir.

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

Bazel, hiçbir paketin geçerli dizinde olmasını gerektirmez. Bu nedenle, gerekli tüm paketler paket yolunda başka bir yerde bulunabiliyorsa 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'in silinmiş olarak kabul etmesi ve paket yolundaki herhangi bir dizinden yüklemeye çalışmaması gereken paketlerin virgülle ayrılmış listesini belirtir. Bu, paketlerin gerçekten silinmesi gerekmeden silinmesini simüle etmek için kullanılabilir. Bu seçenek birden çok kez iletilebilir. Bu durumda, tek tek listeler birleştirilir.

Hata kontrolü

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

--[no]check_visibility

Bu seçenek 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, 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 hedeflere ait derleme ve derleme uyarılarını gösterir. Bir hedef, verilen normal ifadeyle eşleşmezse ve yürütme başarılı olursa standart çıkışı ve standart hatası atlanır.

Aşağıda bu seçenek için bazı tipik 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österin.
`--output_filter=DONT_MATCH_ANYTHING` Hiçbir şey gösterme.

Araç işaretleri

Bu seçenekler, Bazel'in 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; ön işleme, derleme ve/veya C, C++ ya da derleyici kodu derlemek için çağrıldığında derleyiciye aktarılır. Bağlantı verilirken bu ileti dizisi iletilmeyecek.

Bu seçenek birden çok 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, yürütme yapılandırmasında derlenen kaynak dosyalar için derleyiciye iletilecek 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, yönetici 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 yönetici yapılandırması için geçerlidir.

--host_cxxopt=cc-option

Bu seçenek, yönetici 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, yönetici yapılandırmasında derlenen kaynak dosyalar için bağlayıcıya iletilecek bir bağımsız değişken alır. --linkopt seçeneğine benzer ancak yalnızca yönetici 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 işlevine benzer ancak yalnızca C derlemesi için geçerlidir. C++ derlemesi veya bağlama için geçerli değildir. Böylece --conlyopt kullanarak C'ye özel seçenekleri (-Wno-pointer-sign gibi) aktarabilirsiniz.

--cxxopt=cc-option

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

Bu --copt işlevine benzer ancak yalnızca C++ derlemesi için geçerlidir. C derlemesi veya bağlama için geçerli değildir. Böylece C++'a özgü seçenekleri (-fpermissive veya -fno-implicit-templates gibi) --cxxopt kullanarak aktarabilirsiniz.

Ö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şkeni alır.

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

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

Derleme kuralları, özelliklerinde de bağlantı seçeneklerini belirtebilir. Bu seçeneğin ayarları her zaman önceliklidir. Ayrıca bkz. cc_library.linkopts.

--strip (always|never|sometimes)

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

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

hedefi derlerken oluşturulan tüm ikili programlardan hata ayıklama bilgilerini ayıklar.

Bazel'in --strip seçeneği, ld'nin --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 kaldırmak isterseniz ld'nin --strip-all seçeneğini kullanmanız gerekir. Bunu --linkopt=-Wl,--strip-all kodunu Bazel'e ileterek yapabilirsiniz. Ayrıca, Bazel'ın --strip işaretini ayarlamak --linkopt=-Wl,--strip-all politikasını geçersiz kılacağından yalnızca birini ayarlamanız gerekir.

Yalnızca tek bir ikili program oluşturuyorsanız ve tüm simgelerin kaldırılmasını istiyorsanız --stripopt=--strip-all değerini iletip hedefin //foo:bar.stripped sürümünü açıkça oluşturabilirsiniz. --stripopt ile ilgili bölümde açıklandığı gibi bu, derlemenin tüm bağlantı işlemlerinin çıkarılmasına dahil etmek yerine nihai ikili program bağlandıktan sonra bir çıkartma işlemi uygular.

--stripopt=strip-option

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

--fdo_instrument=profile-output-dir

--fdo_instrument seçeneği, oluşturulan C/C++ ikilisi yürütüldüğünde FDO (geri bildirim yönlendirmeli optimizasyon) profili çıkışının oluşturulmasını sağlar. GCC için sağlanan bağımsız değişken, her .o dosyasının profil bilgilerini içeren .gcda dosyalarının nesne başına dosya dizini ağacının 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-zip Bazel seçeneğine sunulmalıdır.

LLVM derleyicisi için bağımsız değişken aynı zamanda ham LLVM profil veri dosyalarının dökümünde yer aldığı 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 bildirim odaklı 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 .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 profile 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 yönlendirmeli 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

yalnızca Java 8 spesifikasyonuyla uyumlu yapılara izin verir ve bunları derler. Varsayılan değer 8'dir. --> Olası değerler 8, 9, 10, 11, 14, 15 ve 21'dir. Bu değerler, default_java_toolchain kullanılarak ö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

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

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

--tool_java_runtime_version=version

Derleme sırasında gerekli olan 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 aktarılmasına izin verir. Tek bir büyük 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 geçirilmesine izin verir. Tek bir büyük 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

javac varsayılan hata ayıklama bilgileriyle (bazel varsayılanı yerine) bir java_binary dosyasını yeniden oluşturur.

Seçenek, javac için Bazel'in yerleşik varsayılan seçeneklerinden sonra ve kural başına seçeneklerden önce javac'ya iletilir. 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'nin eksik doğrudan bağımlılıkları kontrol edip etmediğini kontrol eder. Java hedefleri, doğrudan kullanılan tüm hedefleri açıkça bağımlılık olarak tanımlamalıdır. Bu işaret, javac'ya her bir Java dosyasının tür kontrolü için gerçekte kullanılan jar'ları belirlemesi ve mevcut hedefin doğrudan bağımlılığının çıktısı değilse uyar/hata mesajı ekleme talimatı verir.

  • off, kontrolün devre dışı bırakıldığı anlamına gelir.
  • warn, javac'nın eksik doğrudan bağımlılıkların her biri için [strict] türünde standart Java uyarıları oluşturacağı anlamına gelir.
  • default, strict ve error öğelerinin tümü, Javac'in uyarılar yerine hatalar üretmesine neden olur. Bu da, eksik doğrudan bağımlılıklar bulunması durumunda mevcut hedefin oluşturulamamasına neden olur. Bu, işaret belirtilmediğinde de varsayılan davranıştır.

Anlamsal zekayı oluşturun

Bu seçenekler derleme komutlarını ve/veya çıkış dosyası içeriklerini etkiler.

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

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

  • fastbuild, olabildiğince hızlı derleme yapmak: minimum hata ayıklama bilgisi (-gmlt -Wl,-S) oluşturmak ve optimizasyon yapmamak anlamına gelir. Bu, varsayılan ayardır. Not: -DNDEBUG ayarlanmaz.
  • dbg, gdb (veya başka bir hata ayıklayıcı) kullanabilmeniz için hata ayıklama etkin (-g) ile derleme anlamına gelir.
  • opt, optimizasyonun etkin olduğu ve assert() çağrısı devre dışı bırakılmış (-O2 -DNDEBUG) olarak 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 derlenmesi 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 adla 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 çok kez belirtilebilir. Birden fazla --action_env işaretinde aynı değişkene bir değer atanırsa en son atama kazanır.

--experimental_action_listener=label

experimental_action_listener seçeneği, Bazel'a derleme grafiğine extra_actions eklemek için label tarafından belirtilen action_listener kuralındaki ayrıntıları kullanma talimatı verir.

--[no]experimental_extra_action_top_level_only

Bu seçenek 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 planlanacak hedef grubunu filtreleme talimatı verir.

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

Varsayılan olarak, oluşturma için istenen hedeflerin geçişli kapanışındaki tüm extra_actions işlemleri yürütülmek üzere planlanır. --experimental_extra_action_filter, planlamayı extra_actions ile kısıtlar ve sahibin etiketi belirtilen normal ifadeyle eşleşir.

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

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

--host_cpu=cpu

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

--android_platforms=platform[,platform]*

android_binary kuralının geçişli deps öğesini derleyecek platformlar (özellikle C++ gibi yerel bağımlılıklar için). Örneğin, 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ımlanıp 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" ifadesini 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 ifadesi ifadelerinden biriyle eşleşen ve hariç tutma ifadelerinin hiçbiriyle eşleşmeyen bir etikete veya yürütme yoluna sahip olan tüm C++ dosyaları, belirtilen seçeneklerle oluşturulur. Etiket eşleştirme, etiketin standart biçimini kullanır (ör. //package:label_name).

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

Oluşturulan dosyaları (genel çıkışlar gibi) eşleştirmek için Bazel yalnızca yürütme yolunu kullanabilir. Bu durumda, regexp "//" ile başlamamalıdır. Çünkü bu, hiçbir yürütme yoluyla eşleşmez. Paket adları aşağıdaki gibi kullanılabilir: --per_file_copt=base/.*\.pb\.cc@-g0. Bu, base adlı dizindeki her .pb.cc dosyasıyla eşleşir.

Bu seçenek birden çok kez kullanılabilir.

Seçenek, kullanılan derleme modundan bağımsız olarak uygulanır. Örneğin, --compilation_mode=opt ile derleme yapmak ve daha güçlü optimizasyonun açık olduğu veya optimizasyonu devre dışı bırakılmış bazı dosyaları seçerek derleyebilirsiniz.

Uyarı: Bazı dosyalar hata ayıklama sembolleri kullanılarak seçici bir şekilde derlenmişse bağlantı sırasında simgeler kaldırılabilir. Bu, --strip=never ayarlanarak ö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 - ile önek ekleyebileceğiniz normal ifade anlamına gelir. option, C++ derleyiciye iletilen rastgele bir seçeneği ifade eder. Bir seçenek , içeriyorsa bu şekilde alıntılanması gerekir \,. Normal ifadeleri seçeneklerden ayırmak için yalnızca ilk @ kullanıldığından seçenekler, @ değerini de içerebilir.

Örnek: --per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs file.cc hariç olmak üzere //foo/ içinde bulunan 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 dinamik olarak bağlanıp bağlanmayacağını belirler ve derleme kurallarında linkstatic özelliğiyle etkileşim kurar.

Modlar:

  • default: Bazel'in dinamik olarak bağlanıp bağlanmayacağını seçmesini sağlar. Daha fazla bilgi için linkstatic adresine göz atın.
  • fully: Tüm hedefleri dinamik olarak bağlar. Bu, bağlantı süresini hızlandırır ve elde edilen ikili dosyaların boyutunu azaltır.
  • off: Tüm hedefleri çoğunlukla statik modda bağlar. -static linkopts'te ayarlanırsa hedefler tamamen statik olacak şekilde değişir.

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

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

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

--force_ignore_dash_static

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

--[no]force_pic

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

--android_resource_shrinking

android_binary kuralları için kaynak küçültme işleminin yapılıp yapılmayacağını seçer. android_binary kurallarında shrink_resources özelliği için varsayılan değeri ayarlar. Daha fazla 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ı kullanan hedefler de dahil olmak üzere (herhangi bir malloc belirtmeden) tüm malloc="target" özelliklerini geçersiz kılarak her zaman belirtilen Malloc uygulamasını kullanın.

--crosstool_top=label

Bu seçenek, derleme sırasında tüm C++ derlemelerinde kullanılacak çapraz araç derleyici paketinin konumunu belirtir. Bazel, bir CROSSTOOL dosyası için bu konuma bakar 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 asıl amacı, çapraz derlemeyi mümkün kılmaktır.

--apple_crosstool_top=label

objc*, ios* ve apple* kurallarının geçişli deps içinde C/C++ kurallarını derlemek için kullanılan çapraz araç. Bu işaret, söz konusu hedefler için --crosstool_top değerinin üzerine yazar.

--compiler=version

Bu seçenek, derleme sırasında ikili programların derlenmesinde kullanılacak C/C++ derleyici sürümünü (gcc-4.1.0 gibi) 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 değer doğrudan belirtilmemelidir.

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

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

--java_toolchain=label

İşlemsiz. Yalnızca geriye dönük uyumluluk için saklandı.

--host_java_toolchain=label

İşlemsiz. Yalnızca geriye dönük uyumluluk için saklandı.

--javabase=(label)

İşlemsiz. Yalnızca geriye dönük uyumluluk için saklandı.

--host_javabase=label

İşlemsiz. Yalnızca geriye dönük uyumluluk için saklandı.

Yürütme stratejisi

Bu seçenekler Bazel'in derlemeyi yürütme şeklini etkiler. Derlemenin oluşturduğu çıkış dosyaları üzerinde önemli bir etkiye sahip olmamalıdır. Genellikle ana etkisi derleme hızıdır.

--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şlem 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. Bu, tüm giriş dosyalarının, veri bağımlılıklarının ve araçlarının srcs, data ve tools özelliklerinde doğrudan bağımlılık olarak listelenmesini gerektirir. Bazel, korumalı alana alınan yürütmeyi destekleyen sistemlerde, yerel korumalı alana almayı varsayılan olarak etkinleştirir.
  • local, komutların yerel alt işlem olarak yürütülmesine neden olur.
  • worker, varsa komutların kalıcı çalışan kullanılarak yürütülmesine neden olur.
  • docker, komutların yerel makinedeki bir Docker korumalı alanında 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 özellik 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üleceğini kontrol ederek --spawn_strategy (ve hatırlatıcı Üretme ile --genrule_strategy) işlemini her anımsatıcı temelde geçersiz kılar. Desteklenen stratejiler ve etkileri için --spawn_strategy bölümüne bakın.

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

Bu seçenek, belirli bir regex_filter ile eşleşen açıklamaları olan 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 bölümüne bakın. Desteklenen stratejiler ve etkileri için --spawn_strategy bölümüne bakın.

Açıklamayla eşleşen son regex_filter kullanılır. Bu seçenek, stratejiyi belirtmek için kullanılan 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 "Derleme //foo/bar/baz" işlemini sandboxed stratejisi ile çalıştırır, ancak sıra geri alındığında local ile çalıştırılır.
  • Örnek: --strategy_regexp='Compiling.*/bar=local,sandboxed', local stratejisiyle "//foo/bar/baz" derlemesini çalıştırır ve başarısız olursa sandboxed değerine geri döner.

--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şkeni alan bu seçenek, derlemenin yürütme aşaması sırasında eş zamanlı olarak yürütülmesi gereken işlerin sayısını sınırlandırır.

--progress_report_interval=n

Bazel, henüz tamamlanmamış işlerle (ör. uzun süreli testler) ilgili düzenli olarak bir ilerleme raporu yazdırır. Bu seçenek raporlama sıklığını ayarlar ve ilerleme durumu her n saniyede bir yazdırılır.

Varsayılan değer 0'dır. Bu, artımlı algoritma anlamına gelir: İlk rapor 10 saniye sonra, 30 saniye sonra yazdırılır ve bu ilerleme durumu dakikada bir olarak raporlanır.

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

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

Bu seçenekler, Bazel'in derleme ve test etkinliklerini yerel olarak çalıştırılacak ş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 bir anahtar kelime (HOST_RAM veya HOST_CPUS) ve isteğe bağlı olarak ardından [-|*bolluk] alır (örneğin, --local_cpu_resources=2, --local_ram_resources=HOST_RAM*.5, --local_cpu_resources=HOST_CPUS-1). İşaretler bağımsızdır; bir veya her ikisi birden ayarlanabilir. Varsayılan olarak Bazel, RAM miktarını ve CPU çekirdeği sayısını doğrudan yerel sistemin yapılandırmasına göre tahmin eder.

Varsayılan olarak etkinleştirilen bu seçenek, testler ve ikili programlar için çalıştırma dosyaları sembol bağlantılarının çıkış dizininde derlenip oluşturulmayacağını belirtir. --nobuild_runfile_links kullanmak, çalıştırma dosyası ağaçlarını derleme ek yükü olmadan tüm hedeflerin derlenip derlenmediğini doğrulamak için faydalı olabilir.

Testler (veya uygulamalar) yürütüldüğünde, çalışma süresi veri bağımlılıkları tek bir yerde toplanır. Bazel'in çıkış ağacında bu "runfiles" ağacı genellikle karşılık gelen ikili programın veya testin eşdüzey bir örneğidir. Test yürütme sırasında çalıştırma dosyalarına $TEST_SRCDIR/workspace/packagename/filename formunun yolları kullanılarak erişilebilir. Çalışma dosyaları ağacı, testlerin belirtilen bağımlılığa sahip oldukları tüm dosyalara erişebilmesini ve bundan başka hiçbir şeye erişmemesini sağlar. 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. Özellikle her test (veya uygulama) kendi çalışma dosyası ağacını gerektirdiğinden, bazı büyük derlemelerde 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ılması gerekip gerekmediğini belirtir. Devre dışı bırakıldığında --nobuild_runfile_links.

Runfile ağaçları bellek içi manifestlerden uzaktan oluşturulacağı için testler uzaktan yürütü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. Böylece yürütme aşaması için ek bellekte (yaklaşık %10) yer açılır. Dezavantajı, daha fazla artımlı derlemenin daha yavaş olmasıdır. Ayrıca bkz. Bellek tasarrufu modu.

--[no]keep_going (-k)

GNU Make'de olduğu gibi, derlemenin yürütme aşaması ilk hatayla karşılaşıldığında durur. Bazen hatalar karşısında bile mümkün olduğunca çok şey oluşturmaya çalışmak işe yarar. Bu seçenek bu davranışı etkinleştirir ve belirtildiğinde derleme, ön koşulları başarıyla oluşturulmuş 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 ancak bunlardan yalnızca bazıları başarıyla analiz edilebiliyorsa --keep_going belirtilmemişse derleme bir hatayla durdurulur. Bu durumda derleme, sadece başarıyla analiz edilen hedefler için yürütme aşamasına geçer.

--[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 çıkışı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 sayede, yalnızca sınıfa ait kurumlar veya sınıfın özel üyeleri yönteminde değişiklik yapıldığında yeniden derlemenin önlenmesi mümkün olur.

--[no]interface_shared_objects

Bu seçenek, ikili programların ve diğer paylaşılan kitaplıkların, uygulanması yerine paylaşılan bir nesnenin arayüzüne bağlı olmasını sağlayan arayüz paylaşılan nesneleri etkinleştirir. Yalnızca uygulama değiştiğinde Bazel, değiştirilen paylaşılan kitaplığa bağlı hedefleri gereksiz bir şekilde yeniden oluşturmaktan kaçınabilir.

Çıkış seçimi

Bu seçenekler neyin oluşturulacağını veya test edileceğini belirler.

--[no]build

Bu seçenek, derlemenin yürütme aşamasının gerçekleştirilmesine neden olur. Varsayılan olarak etkindir. Bu mod kapatıldığında yürütme aşaması atlanır ve sadece ilk iki aşama olan yükleme ve analiz gerçekleşir.

Bu seçenek, hiçbir şey derlemeden DERLE dosyalarını doğrulamak ve girişlerdeki hataları tespit etmek için yararlı olabilir.

--[no]build_tests_only

Belirtilirse Bazel yalnızca boyutları, zaman aşımı, etiketi veya dil nedeniyle filtrelenmemiş *_test ve test_suite kurallarını çalıştırmak için gerekeni oluşturur. Belirtilirse Bazel, komut satırında belirtilen diğer hedefleri yoksayar. Bu seçenek varsayılan olarak devre dışıdır ve Bazel, filtrelenen *_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 kesintilerini algılayamayacağı için faydalıdır.

--[no]check_up_to_date

Bu seçenek Bazel'in derleme gerçekleştirmemesine, yalnızca belirtilen tüm hedeflerin güncel olup olmadığını kontrol etmesine neden olur. Öyleyse derleme her zamanki gibi başarıyla tamamlanır. Bununla birlikte, herhangi bir dosya güncel değilse, oluşturulmak yerine bir hata bildirilir ve derleme başarısız olur. Bu seçenek, derleme maliyeti olmadan bir derlemenin kaynak düzenlemesinden daha yakın zamanda (örneğin, gönderim öncesi kontroller için) gerçekleştirilip gerçekleştirilmediğini belirlemek için faydalı 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ın söz dizimini kontrol ederken (örneğin, düzenleme/derleme/test döngüsünde hataları mümkün olduğunca erken tespit etmek için kaynak dosyaya bağlı olan tek bir hedefi yeniden oluşturarak) faydalıdır. 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 bir dosya hedefi etiketi veya geçerli çalışma dizinine göre düz bir dosya adı olmalı ve her kaynak dosya adına bağlı tek bir kural oluşturulmalıdır. C++ ve Java kaynakları için aynı dil alanındaki kurallar tercihen seçilir. Aynı tercihe sahip birden çok kural için BUILD dosyasında ilk görünen kural seçilir. Kaynak dosyaya referans vermeyen, açıkça adlandırılmış bir hedef kalıbı hatayla sonuçlanır.

--save_temps

--save_temps seçeneği, derleyiciden gelen 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ı yer alır. Bu çıkışlar hata ayıklamada genellikle faydalıdır. Geçici sınırlar 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 belirtilmişse) ve hariç tutulan herhangi bir etiketi olmayan hedefleri oluşturur. Derleme etiketi filtresi, isteğe bağlı olarak hariç tutulan etiketleri belirtmek için kullanılan "-" işaretiyle başlayan ve virgülle ayrılmış etiket anahtar kelimeleri listesi olarak belirtilir. Gerekli etiketlerin önünde "+" işareti de olabilir.

Testleri çalıştırırken Bazel, bu filtreyle eşleşmeseler bile oluşturulan ve çalıştırılan test hedefleri için --build_tag_filters değerini yoksayar. Oluşturulmalarını önlemek için --test_tag_filters kullanarak veya açık bir şekilde hariç tutarak test hedeflerini filtreleyin.

--test_size_filters=size[,size]*

Belirtilirse Bazel, yalnızca belirtilen boyuttaki hedefleri test eder (veya --build_tests_only belirtilmişse derleme yapar). Test boyutu filtresi, izin verilen test boyutu değerlerinin virgülle ayrılmış listesi (küçük, orta, büyük veya çok büyük) şeklinde belirtilir. İsteğe bağlı olarak, hariç tutulan test boyutlarını belirtmek için kullanılan "-" işareti eklenir. Ö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 düzey testleri test eder.

Varsayılan olarak, test boyutu filtrelemesi uygulanmaz.

--test_timeout_filters=timeout[,timeout]*

Belirtilirse Bazel, belirtilen zaman aşımı değerine sahip hedefleri test eder (veya --build_tests_only belirtilmişse derleme yapar). Test zaman aşımı filtresi, izin verilen test zaman aşımı değerlerinin virgülle ayrılmış listesi (kısa, orta, uzun veya sonsuz) şeklinde belirtilir. İsteğe bağlı olarak, hariç tutulan test zaman aşımlarını belirtmek için kullanılan "-" işareti eklenir. Örnek söz dizimi için --test_size_filters bölümüne 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 belirtilmişse) ve hariç tutulan herhangi bir etiketi olmayan test hedeflerini test eder (veya --build_tests_only belirtilmişse derler). Test etiketi filtresi, isteğe bağlı olarak hariç tutulan etiketleri belirtmek için kullanılan "-" işaretiyle önceden belirlenmiş, virgülle ayrılmış etiket anahtar kelimeleri listesi olarak belirtilir. Gerekli etiketlerin önünde "+" işareti de olabilir.

Örneğin,

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

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

Varsayılan olarak, test etiketi filtreleme 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ış listesini belirtir. foo_test kural sınıfına başvurmak için "foo" dizesini kullanın. Bazel, yalnızca başvurulan kural sınıflarının hedeflerini test eder (veya --build_tests_only belirtilmişse derleme yapar). Bunun yerine bu hedefleri hariç tutmak için "-foo" dizesini kullanın. Örneğin,

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

yalnızca //baz/... bölgesinde foo_test veya bar_test örnekleri 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 edecek.

--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 filtreyi belirtir. Çağrıda belirtilen tüm hedefler oluşturulur, ancak ifadeye bağlı olarak bunlardan yalnızca bazıları yürütülebilir; bazı durumlarda yalnızca belirli test yöntemleri çalıştırılır.

filter-expression işlevinin nasıl yorumlanması, 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 iletilmesini kolaylaştırır, ancak tüm çerçeveler bunu desteklemez.

Ayrıntı düzeyi

Bu seçenekler, terminale veya ek günlük dosyalarına yönelik Bazel çıkışı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'a yazılır.

Beklenmedik yeniden oluşturmalarla karşılaşıyorsanız bu seçenek, sorunun nedenini anlamanıza yardımcı olabilir. Sonraki tüm derlemelerde günlüğe kaydetme işleminin gerçekleşmesi için bu kodu .bazelrc cihazınıza ekleyin ve ardından beklenmedik bir şekilde yürütülen bir yürütme adımı gördüğünüzde günlüğü inceleyin. Bu seçenekte küçük bir performans cezası oluşabilir. Bu nedenle, 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 etkinse ve bir çıkış dosyası oluşturulurken kullanılan komut değiştiğinden yeniden oluşturulursa açıklama dosyasındaki çıkış, yeni komutun tüm ayrıntılarını (en azından çoğu komut için) içerir.

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

--explain etkinleştirilmezse --verbose_explanations geçerliliğini yitirir.

--profile=file

Dosya adı bağımsız değişkenini alan bu seçenek, Bazel'in profil çıkarma verilerini dosyaya 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 zamanını nerede harcadığını anlamak açısından faydalı olabilir.

--[no]show_loading_progress

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

--[no]show_progress

Bu seçenek, ilerleme mesajlarının görüntülenmesini sağlar; varsayılan olarak etkindir. Devre dışı bırakıldığında ilerleme durumu mesajları atlanır.

--show_progress_rate_limit=n

Bu seçenek, bazel'in 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 sonunda sonuç bilgilerinin yazdırılmasını kontrol eder. Varsayılan olarak, tek bir derleme hedefi belirtilmişse Bazel, hedefin başarıyla güncellenip güncellenmediğini ve güncellenmişse hedefin oluşturduğu çıkış dosyalarının listesini belirten bir mesaj yazdırır. Birden fazla hedef belirtilirse sonuç bilgileri gösterilmez.

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

Kullanıcılar, küçük bir hedef grubu (örneğin, derleme-düzenleme-test döngüsü sırasında) ile büyük bir hedef grubu (örneğin, yeni bir çalışma alanı oluştururken veya regresyon testleri yaparken) arasında düzenli olarak geçiş yaptıklarında aralarında bir değer seçmek isteyebilirler. İlk durumda sonuç bilgileri çok yararlı olurken, ikinci durumda daha az faydalıdır. Tüm seçeneklerde olduğu gibi bu, .bazelrc dosyası aracılığıyla örtülü olarak belirtilebilir.

Dosyalar, derlenen yürütülebilir dosyaları çalıştırmak 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ı, derleme çalıştıran komut dosyaları tarafından kolayca ayrıştırılabilir.

--sandbox_debug

Bu seçenek, işlem yürütme için korumalı alanı kullanırken Bazel'in ekstra hata ayıklama bilgileri yazdırmasına neden olur. Bu seçenek, korumalı alan dizinlerini de korur. Böylece, yürütme sırasında işlemlere görünür olan dosyalar incelenebilir.

--subcommands (-s)

Bu seçenek, Bazel'in yürütme aşamasının her komut çalıştırmadan önce komut satırının tamamı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)

Komutlar, mümkün olduğunda Bourne kabuğuyla uyumlu bir söz diziminde yazdırılır. Böylece, kolayca kopyalanıp bir kabuk komut istemine yapıştırılabilir. (Kabuğunuzu cd ve exec çağrılarından korumak için buradaki parantezler verilmiştir. Bu çağrıları 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 bir komut satırı yoktur.

Komutun bağımsız değişkenlerini tek bir satır yerine liste halinde yazdırmak için --subcommands=pretty_print iletilebilir. Bu yöntem, uzun komut satırlarının daha okunabilir olmasını sağlayabilir.

Ayrıca aşağıdaki --verbose_failures konusuna da bakın.

Alt komutları araç dostu biçimde bir dosyaya kaydetmek için bkz. --execution_log_json_file ve --execution_log_binary_file.

--verbose_failures

Bu seçenek, Bazel'in yürütme aşamasının başarısız olan komutlar için komut satırının tamamını yazdırmasına neden olur. Bu, hatalı bir derlemede hata ayıklamak için paha biçilmez bir rol oynayabilir.

Başarısız olan komutlar, kabuk istemine kopyalayıp yapıştırmaya uygun, Bourne kabuğuyla 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: İkili programlara kaynak denetimi düzeltmesi veya çalışma alanıyla ilgili diğer bilgiler gibi ek bilgiler yerleştirin. Bu mekanizmayı stamp özelliğini destekleyen kurallarla (ör. genrule, cc_binary ve daha fazlası) kullanabilirsiniz.

--workspace_status_command=program

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

İş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, standart çıkışa sıfır veya daha fazla anahtar/değer çifti, her satırda bir giriş olmalı, ardından sıfır ile çıkmalı (aksi takdirde derleme başarısız olur). Anahtar adları herhangi bir şey olabilir ancak yalnızca büyük harf ve alt çizgi kullanabilirler. Anahtar adından sonraki ilk boşluk, onu değerden ayırır. Değer, satırın geri kalanıdır (ek boşluklar dahil). Anahtar ya da değer birden çok satıra yayılamaz. Anahtarlar yinelenmemelidir.

Bazel, anahtarları iki pakete ayırır: "kararlı" ve "değişken". ("İstikrarlı" ve "değişken" adları biraz tuhaftır, 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 anahtarları ve değerleri içerir
  • bazel-out/volatile-status.txt, geri kalan anahtarları 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 öğesinin içeriği değişirse Bazel, bu öğelere bağlı işlemleri geçersiz kılar. Başka bir deyişle, sabit bir anahtarın değeri değişirse Bazel damgalı işlemleri yeniden çalıştırır. Bu nedenle, kararlı durumda zaman damgaları gibi öğeler bulunmamalıdır. Çünkü bunlar sürekli olarak değişir ve Bazel'in her derlemede damgalı işlemleri yeniden çalıştırmasına neden olur.

    Bazel her zaman aşağıdaki sabit anahtarları verir:

    • BUILD_EMBED_LABEL: --embed_label değeri
    • BUILD_HOST: Bazel'in çalıştığı ana makinenin adı
    • BUILD_USER: Bazel'in kullandığı kullanıcının adı
  • "Değişken" anahtarların değerleri sık sık değişebilir. Bazel, zaman damgalarında olduğu gibi bunların sürekli değişmesini bekler ve bazel-out/volatile-status.txt dosyasını gereken şekilde 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. Başka bir deyişle, içeriği değiştirilen tek dosya değişken durum dosyasıysa Bazel bu dosyaya bağımlı işlemleri geçersiz kılmaz. İşlemin diğer girişleri değiştiyse Bazel bu işlemi yeniden çalıştırır ve işlem, güncellenen değişken durumunu görür ancak yalnızca değişken durumun tek başına değişmesi işlemi geçersiz kılmaz.

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

    • BUILD_TIMESTAMP: Unix Epoch'tan itibaren saniye cinsinden derleme süresi (System.currentTimeMillis() değerinin bine bölümü)
    • FORMATTED_DATE: Derlemenin zamanı(ör. 2 01 44 29 Cuma), UTC saat diliminde yyyy MMM d HH mm ss EEE olarak biçimlendirilmiştir.

Linux/macOS'te, true hiçbir şey yapmaz, başarılı bir şekilde çıktığı ve hiç çıkış yazdırdığı için, Linux/macOS'te çalışma alanı durumunu almayı devre dışı bırakmak için --workspace_status_command=/bin/true anahtarını iletebilirsiniz. Windows'da aynı etki için MSYS'nin true.exe yolunu iletebilirsiniz.

Çalışma alanı durum komutu herhangi bir nedenle başarısız olursa (sıfır dışında çı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çtiğinizde 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ılı bilgi için lütfen Build Ansiklopedi'yi inceleyin. Bir kural stamp = -1 (*_binary kuralları için varsayılan) ayarladığında bu seçenek, damgalamanın etkin olup olmadığını belirler.

Bu seçenekten veya stamp özelliğinden bağımsız olarak Bazel, yönetici yapılandırması için oluşturulan ikili programları hiçbir zaman damgalamaz. stamp = 0 değerini (*_test kuralları için varsayılan) ayarlayan kurallar için damgalama, --[no]stamp özelliğinden bağımsız olarak devre dışı bırakılır. --stamp belirtilmesi, bağımlılıkları değişmediği takdirde hedefleri yeniden oluşturulmaya zorlamaz.

--nostamp ayarlanması, giriş dalgalanmasını azalttığı ve derleme önbelleğe almayı en üst düzeye çıkardığı için genellikle derleme performansı açısından istenen bir ayardır.

Platform

Derlemelerin çalışma şeklini yapılandıran ana makine ile hedef platformları ve Bazel kurallarında hangi yürütme platformlarının ve araç zincirlerinin kullanılabileceğ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 etiketleri.

--host_platform=label

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

--extra_execution_platforms=labels

İşlemleri çalıştırmak için yürütme platformları olarak kullanılabilen platformlar. Platformlar, tam hedefe göre veya bir 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 fazla kez geçilirse en son geçersiz kılma işlemleri.

--extra_toolchains=labels

Araç zinciri çözümlemesi sırasında dikkate alınacak araç zinciri kurallarıdır. Araç zincirleri, tam hedefe göre veya bir hedef kalıbı olarak belirtilebilir. Bu araç zincirleri, WORKSPACE dosyasında register_toolchains() tarafından bildirilenlerden önce değerlendirilir.

--toolchain_resolution_debug=regex

Araç zinciri türü normal ifadeyle eşleşirse araç zincirlerini bulurken hata ayıklama bilgilerini yazdırın. Birden fazla normal ifade virgülle ayrılabilir. Normal ifade, başında - kullanılarak reddedilebilir. Bu, Bazel veya Starlark kurallarının geliştiricilerinin, eksik araç zincirleri nedeniyle oluşan hata ayıklama hatalarında 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 bir kolaylık işareti. Daha fazla ayrıntı için Starlark Yapılandırmaları'na bakın.

Oluşturulan kolaylık sembollerinin ön ekini değiştirir. Simgesel bağlantı öneki için varsayılan değer bazel- şeklindedir ve bazel-bin, bazel-testlogs ve bazel-genfiles sembollerini oluşturur.

Sembolik bağlantılar herhangi bir nedenle oluşturulamıyorsa bir uyarı verilir ancak derleme yine de başarılı olarak kabul edilir. Özellikle, bu şekilde salt okunur bir dizin veya yazma izninizin olmadığı bir dizin oluşturabilirsiniz. Bir derlemenin sonunda bilgi mesajlarında yazdırılan yollar, yalnızca sembolik bağlantılar beklenen konumu işaret ediyorsa sembole bağlı kısa biçimi kullanır. Başka bir deyişle, oluşturulan sembolik bağlantılara güvenemeseniz bile bu yolların doğruluğuna güvenebilirsiniz.

Bu seçeneğin bazı yaygın değerleri:

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

  • Karmaşıklığı azaltın: --symlink_prefix=.bazel/, Bazel'in gizli bir .bazel dizininde 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, bu şekilde birbirinin çıkış dosyalarını dağıtan derlemelerin önbellek isabet oranlarını artırabilir veya çıkış dosyalarını karşılaştırma için saklayabilirsiniz.

--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 eksiksizliği korumak amacıyla belgelenmiştir.

--starlark_cpu_profile=_file_

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

Aşırı hesaplama nedeniyle yüklemeyi ve analizi yavaşlatan Starlark işlevlerini tespit etmek 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 svg, web ve list pprof komutlarını deneyin.

Yayınlar için Bazel kullanma

Bazel hem yazılım mühendisleri tarafından geliştirme döngüsü sırasında hem de sürüm mühendisleri tarafından üretim için dağıtım için ikili programları hazırlarken kullanılır. Bu bölümde, Bazel'i kullanan sürüm mühendislerine yönelik ipuçlarının bir 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 ayrıntılı bilgi için Komut dosyalarından Bazel'ı arama bölümünü inceleyin. Özellikle aşağıdaki seçenekler önerilir:

Ş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 farklı bir tanımlayıcıyla ayırt etmek kullanışlı olabilir. Bu seçenek, bazel-bin (vb.) sembol bağlantılarını farklılaştırır.

Testler yapılıyor

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

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

bazel test için seçenekler

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

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

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

"No" (hayır) ise tüm testler koşulsuz olarak yürütülür.

Yanıt değeri "evet" ise önbelleğe alma davranışı, otomatik testiyle aynı olur. Tek fark, test hatalarını önbelleğe alabilir ve test, --runs_per_test ile çalıştırılabilir.

.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ı 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ılmamış olan ya da test sonuçları güncel olmayan (örneğin, kaynak kodu veya derleme seçenekleri değiştiği için) testler varsa Bazel bir hata mesajı ("test sonucu güncel değil") bildirir, test durumunu "DURUM YOK" (renk çıkışı etkinse kırmızı renkte) olarak kaydeder ve sıfır dışında bir kod döndürür.

Bu seçenek, --check_up_to_date davranışını da ima eder.

Bu seçenek, gönderim öncesi kontroller için yararlı olabilir.

--test_verbose_timeout_warnings

Bu seçenek, bir testin zaman aşımı testin gerçek yürütme süresinden çok daha uzunsa Bazel'a kullanıcıyı açıkça uyarmasını söyler. Bir testin zaman aşımının güvenilir olmayan bir şekilde ayarlanması gerekirken, son derece fazla cömert bir zaman aşımına sahip bir test, beklenmedik şekilde ortaya çıkan gerçek sorunları gizleyebilir.

Örneğin, normalde bir veya iki dakika içinde yürütülen bir testin zaman aşımı süresi ETERNAL veya LONG olmamalıdır. Zira bunlar çok fazla cömert olabilir.

Bu seçenek, kullanıcıların iyi bir zaman aşımı değerine karar vermelerine veya mevcut zaman aşımı değerlerinin tutarlılığını kontrol etmelerine yardımcı olmak açısından kullanışlıdır.

--[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 geçemeyen tüm testlerde derleme iptal edilir. Sonraki derleme adımları ve test çağrıları çalıştırılmaz ve devam eden çağrılar iptal edilir. --notest_keep_going ve --keep_going öğelerini belirtmeyin.

--flaky_test_attempts=attempts

Bu seçenek, herhangi bir nedenle başarısız olursa bir testin maksimum kaç kez denenebileceğini belirtir. Başlangıçta başarısız olan ancak daha sonra başarılı olan test özetinde FLAKY olarak raporlanır. Bununla birlikte, Bazel çıkış kodunu veya geçilen testlerin toplam sayısını belirleme söz konusu olduğunda geçilmesi kabul edilir. İzin verilen tüm denemelerde başarısız olan testler, başarısız olarak kabul edilir.

Varsayılan olarak (bu seçenek belirtilmediğinde veya varsayılan olarak ayarlandığında) normal testler için yalnızca bir deneme ve flaky özelliğinin ayarlanmış olduğu 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ımını önlemek için en fazla 10 test denemesine izin verir.

--runs_per_test=[regex@]number

Bu seçenek, her testin kaç kez yürütülmesi gerektiğini belirtir. Tüm test yürütmeleri ayrı testler olarak kabul edilir (yedek işlevsellik her biri için bağımsız olarak geçerlidir).

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

  • Yoksa başarısız çalıştırmalardan biri, testin tamamının başarısız olmasına neden olur.
  • Aynı parça döndürme işleminden iki tanesi PASS ve BAŞARISIZ çalışırsa teste "kesintisiz" durumu gösterilir (diğer 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ı kadar yürütülür. Alternatif olarak, normal ifade, normal ifade@numara söz dizimi kullanılarak belirtilebilir. Bu, --runs_per_test işlevinin etkisini normal ifadeyle eşleşen hedeflerle kısıtlar (--runs_per_test=^//pizza:.*@4, tüm testleri //pizza/ altındaki 4 kez çalıştırır). Bu --runs_per_test biçimi birden fazla kez belirtilebilir.

--[no]runs_per_test_detects_flakes

Bu seçenek belirtilirse (varsayılan olarak belirtilmezse) Bazel, --runs_per_test tarihine kadar güvenilir test kırıklarını algılar. Bir veya daha fazla parça tek bir parçada başarısız olursa ve aynı kırık geçişi için bir ya da daha fazla koşu yaparsa hedef, işaretle birlikte "kesintisiz" olarak kabul edilir. Belirtilmemişse hedef, "başarısız" durumunu bildirir.

--test_summary=output_style

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

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

--test_output=output_style

Test çıkışının nasıl gösterilmesi gerektiğini belirtir:

  • summary, her bir testin başarılı olup olmadığının bir özetini gösterir. Ayrıca, başarısız testlerin çıkış günlük dosyası adını gösterir. Özet, derlemenin sonunda yazdırılır (derleme sırasında testler başladığında, başarılı olduğunda veya başarısız olduğunda basit ilerleme mesajları gösterilir). Bu, varsayılan davranıştır.
  • errors, başarısız testlerden alınan birleştirilmiş stdout/stderr çıkışını yalnızca test tamamlandıktan hemen sonra stdout'a göndererek eş zamanlı testlerden elde edilen test çıktılarının birbirine boşluk eklenmemesini sağlar. 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 tüm testler için çıktıyı yazdırır.
  • streamed, her testten gerçek zamanlı olarak stdout/stderr çıkışını aktarır.

--java_debug

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

--[no]verbose_test_summary

Bu seçenek varsayılan olarak etkindir. Bu da 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çindeki ayrı bir alt dizinde yürütülür. Dizin, her bazel test komutunun başında temizlenir. Varsayılan olarak, bazel bu dizini Bazel çıkış temel dizininin altına yerleştirir.

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

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

Alternatif olarak kısa, orta, uzun ve sonsuz testler (bu sırayla) için tek tek zaman aşımları belirten, virgülle ayrılmış dört değer sağlanabilir. Her iki biçimde de, test boyutlarından herhangi birinin sıfır veya negatif değeri, Testler Yazma sayfasında tanımlanan belirli zaman aşımı kategorileri için varsayılan zaman aşımıyla değiştirilir. Varsayılan olarak Bazel, boyutun örtülü veya açık bir şekilde ayarlandığına bakılmaksızın zaman aşımı sınırını testin boyutundan çıkarıp tüm testler için bu zaman aşımlarını kullanır.

Zaman aşımı kategorilerinin boyutlarından farklı olduğunu açıkça belirten testler, zaman aşımının boyut etiketi tarafından dolaylı olarak ayarlandığını kabul ederek aynı değeri alır. Dolayısıyla, "uzun" zaman aşımını bildiren "küçük" boyutundaki bir test, açık bir zaman aşımı olmadan "büyük" testlerin sahip olduğu etkin zaman aşımına sahip olacaktır.

--test_arg=arg

Her test işlemine komut satırı seçeneklerini/bayrakları/bağımsız değişkenleri geçirir. Bu seçenek, birkaç bağımsız değişkeni iletmek için birden çok 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 ürününde olduğu gibi iletemeyeceğinizi unutmayın. Bunun nedeni, bazel test işlevine iletilen fazladan bağımsız değişkenlerin ek test hedefleri olarak yorumlanmasıdır. Diğer bir deyişle, --logtostderr ve --v=3 her biri bir test hedefi olarak yorumlanır. Yalnızca bir hedefi kabul eden bazel run komutu için bu belirsizlik yoktur.

--test_arg, bazel run komutuna iletilebilir 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, -- jetonundan sonra bir bazel run komutu içinde iletilirse 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++) kullanılarak bir test içinden erişilebilir.

--run_under=command-prefix

Bu, test çalıştırıcının çalıştırmadan önce test komutunun önüne ekleyeceği ön eki belirtir. command-prefix, Bourne kabuk şifreleme kuralları kullanılarak kelimelere bölünür. Ardından yürütülecek komutun başına kelime listesi eklenir.

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

Dikkat edilmesi gereken bazı noktalar:

  • Testleri çalıştırmak için kullanılan PATH, ortamınızdaki PATH değerinden farklı olabilir. Bu nedenle, --run_under komutu (command-prefix içindeki ilk kelime) için 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 dil'e göre filtreleyebilirsiniz. Kolaylık sağlayan bir genel ad filtresi, belirli filtre bağımsız değişkenlerini test çalıştırıcıya yönlendirebilir.

bazel test için diğer seçenekler

Söz dizimi ve kalan seçenekler bazel build ile tam olarak 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 oturumu aşağıda görebilirsiniz (//java/myapp:myapp merhaba diyor ve bağımsız değişkenlerini yazdırıyor):

  % bazel run java/myapp:myapp -- --arg1 --arg2
  INFO: Analyzed target //java/myapp:myapp (13 packages loaded, 27 targets configured).
  INFO: Found 1 target...
  Target //java/myapp:myapp up-to-date:
    bazel-bin/java/myapp/myapp
  INFO: Elapsed time: 14.290s, Critical Path: 5.54s, ...
  INFO: Build completed successfully, 4 total actions
  INFO: Running command line: bazel-bin/java/myapp/myapp <args omitted>
  Hello there
  $EXEC_ROOT/java/myapp/myapp
  --arg1
  --arg2

bazel run, Bazel tarafından derlenen ikili programın doğrudan çağrılmasına benzer ancak aynı değildir ve davranışı, çağrılacak ikili programın test olup olmamasına bağlı olarak değişiklik gösterir.

İkili program test değilse mevcut çalışma dizini, ikili programın Runfiles ağacı olur.

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

Aşağıdaki ekstra ortam değişkenleri de ikili program tarafından kullanılabilir:

  • BUILD_WORKSPACE_DIRECTORY: Derlemenin çalıştırıldığı çalışma alanının kökü.
  • BUILD_WORKING_DIRECTORY: Bazel'in ç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 tarafından ç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ı haricinde bazel test için --run_under seçeneğiyle aynı etkiye sahiptir (yukarıya bakın).

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

bazel run ile bir ikili program çağırırken Bazel, hem Bazel'in kendisinden hem de çağrı altındaki ikili programdan günlük kaydı çıktısını yazdırır. Günlükleri daha az karmaşık hale getirmek için --ui_event_filters ve --noshow_progress işaretlerini kullanarak Bazel'in kendisinden çıkışları engelleyebilirsiniz.

Ö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 sayede, testi Testler Yazma bölümünde açıklanan ortama yakın bir yaklaşımla çalıştırabilirsiniz. Bu şekilde bir test çalıştırırken --test_* bağımsız değişkenlerinin hiçbirinin --test_arg dışında bir etkisi olmadığını unutmayın .

Derleme çıkışlarını temizleme

clean komutu

Bazel'in, Make komutuna benzer bir clean komutu vardır. Bu Bazel örneği tarafından gerçekleştirilen tüm derleme yapılandırmaları veya bu Bazel örneği tarafından oluşturulan çalışma ağacının tamamı için çı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ın çıkış dizini temizlenir.

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

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 komut, derleme çıkışına ek olarak Bazel tarafından oluşturulan tüm geçici dosyaları içeren çıkış temel ağacının tamamını kaldırır. Ayrıca, shutdown komutuna eşdeğer olan temiz komutun 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 Bazel komutunu aynı istemcide çağırmak güvenlidir.

clean komutu birincil olarak, artık ihtiyaç duyulmayan çalışma alanları için disk alanı geri kazanmak amacıyla sağlanır. Bazel'ın artımlı yeniden oluşturmaları mükemmel olmayabilir. Bu nedenle, sorun ortaya çıktığında tutarlı durumu kurtarmak için clean kullanılabilir.

Bazel'ın tasarımı bu sorunlar giderilebilir ve bu hataların düzeltilmesi büyük önem taşır. Yanlış bir artımlı derleme bulursanız clean 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, sorgunun analiz aşamasından sonra çalıştırılmasıdır. Bu araçlar pek çok yazılım mühendisliği görevi için paha biçilmez bir yardımcıdır.

Sorgu dili, grafikler yerine cebirsel işlemler fikrini temel alır. Bu kavram,

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

Sorgu aracı, çeşitli komut satırı seçeneklerini kabul eder. --output, çıkış biçimini seçer. --[no]keep_going (varsayılan olarak devre dışıdır), sorgu aracının hatalar oluştuğunda ilerleme yapmaya devam etmesine neden olur. Hata olması durumunda eksik bir sonuç kabul edilemezse bu davranış devre dışı bırakılabilir.

Varsayılan olarak etkinleştirilen --[no]tool_deps seçeneği, hedeflenmeyen yapılandırmalardaki bağımlılıkların, sorgunun çalıştığı bağımlılık grafiğine dahil edilmesine 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 dahil edilmesine neden olur. Örtülü bağımlılık, BUILD dosyasında açıkça belirtilmeyen ancak bazel tarafından eklenen bağımlılıktır.

Örnek: "PEBL ağacındaki tüm testleri derlemek için gereken tüm genel kuralların tanımlarının (BUILD dosyalarında) konumlarını gösterin."

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

İşlem grafiğini sorgulama

aquery komutu, derleme grafiğinizdeki işlemleri sorgulamanızı sağlar. Analiz sonrası yapılandırılan hedef grafikte çalışır ve eylemler, eserler ve bunların ilişkileriyle ilgili bilgileri açığa çıkarır.

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 biçimdedir. Makine tarafından okunabilir biçim için proto veya textproto kullanın. Bu nedenle, aquery komutu normal bir Bazel derlemesinin üzerinde çalışır ve derleme sırasında kullanılabilen seçenek kümesini devralır.

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

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

Çeşitli komutlar ve seçenekler

help

help komutu, online yardım sunar. Varsayılan olarak, Bazel ile Oluşturma bölümünde gösterildiği gibi, kullanılabilir komutların ve yardım konularının bir özeti gösterilir. Bağımsız değişken belirtmek, belirli bir konuyla ilgili ayrıntılı yardım görüntüler. Ç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], yalnızca bir konuyla alakalı seçeneklerin özetini yazdırır. --long seçeneği belirtilirse her seçeneğin tür, varsayılan değeri ve tam açıklaması da yazdırılır.

shutdown

Bazel sunucusu işlemleri, shutdown komutu kullanılarak durdurulabilir. Bu komut, Bazel sunucusunun boşta kaldığında (örneğin, devam etmekte olan derlemeler veya diğer komutlar tamamlandıktan sonra) hemen çı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ından sonra kendilerini durdurur. Bu nedenle, bu komut nadiren gerekir. Ancak belirli bir çalışma alanında başka derleme oluşturmayacağı bilindiğinde komut dosyalarında yararlı olabilir.

shutdown, tam sayı bağımsız değişkeni (MB cinsinden) gerektiren --iff_heap_size_greater_than _n_ adlı bir seçeneği kabul eder. Belirtilirse bu, kapanmayı halihazırda tüketilen bellek miktarına göre koşullu hale getirir. Bu, çok sayıda derleme başlatan komut dosyaları için kullanışlıdır. Çünkü Bazel sunucusundaki herhangi bir bellek sızıntısı, sunucudaki bazı durumlarda hayali bir şekilde çökmesine neden olabilir. 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şkilendirilmiş çeşitli değerleri yazdırır. (Bunlar, bir derleme yürüten komut dosyaları tarafından kullanılabilir.)

info komutu, aşağıdaki listede bulunan anahtarlardan birinin adı olan tek (isteğe bağlı) bir bağımsız değişkene de izin verir. Bu durumda, bazel info key yalnızca o anahtarın değerini yazdırır. (Bu yöntem, sonucu sed -ne /key:/s/key://p ile aktarma ihtiyacını ortadan kaldırdığı için özellikle Bazel'i komut dosyası oluştururken kullanışlıdır:

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

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

  • output_base: geçerli kullanıcı ve çalışma alanı kombinasyonu için bu Bazel örneği tarafından kullanılan temel çıkış dizinine giden mutlak yol. Bazel tüm sıfırdan derlemelerini bu dizinin altına yerleştirir.

  • 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şebileceği tüm dosyaların kök dizinidir ve bu komutların çalışma dizinidir. Çalışma alanı dizini yazabiliyorsa buraya, bu dizini işaret eden bazel-<workspace> adlı bir sembol bağlantısı yerleştirilir.

  • output_path: Derleme komutları sonucunda oluşturulan tüm dosyalar için kullanılan yürütme kökünün altındaki çıkış dizininin mutlak yoludur. Çalışma alanı dizini yazabiliyorsa buraya, 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 geçerli olan tüm komutlarla ilgili hata ayıklama bilgilerini içerir ve Bazel geliştiricileri ile deneyimli kullanıcılar tarafından insan tüketimine yöneliktir.

  • command_log: Komut günlük dosyasının mutlak yoludur. Bu, en yeni Bazel komutunun araya eklemeli stdout ve stderr akışlarını içerir. bazel info çalıştırıldığında en yeni Bazel komutu olacağından bu dosyanın içeriklerinin ü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 bildirir. Sırasıyla: şu anda kullanılan bellek, şu anda sistemden JVM'ye uygun olması garanti edilen bellek, mümkün olan maksimum ayırma.

  • gc-count, gc-time: Bu Bazel sunucusunun başlangıcından bu yana toplanan atık toplama sayısı ve bu işlemleri gerçekleştirmek için harcanan süre. Bu değerlerin her derlemenin başında sıfırlanmadığını unutmayın.

  • package_path: Bazel tarafından paketler için aranacak yolların iki nokta işaretiyle ayrılmış 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 özel veriler

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

  • 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ıdır. Ancak, çalışma alanı dizini salt okunursa bazel-* sembolik bağlantısı oluşturulamaz. bazel info tarafından bildirilen değeri kullanan komut dosyaları, sembolik bağlantının mevcut olduğunu varsaymak yerine daha sağlam olur.
  • Eksiksiz "Oluşturma" ortamı. --show_make_env işareti belirtilirse mevcut yapılandırmanın "Make" 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: mevcut yapılandırma için C++ derleyicisi. Bu, "Make" ortamındaki $(CC) değişkeni olduğundan --show_make_env işareti gereklidir.

  % bazel info --show_make_env -c opt COMPILATION_MODE
  opt

Örnek: mevcut yapılandırmanın bazel-bin çıkış dizini. Bu ayarın herhangi bir nedenle (ör. salt okunur bir dizinden derleme yapıyorsanız) bazel-bin sembolik bağlantısının oluşturulamadığı durumlarda bile 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, derlenen Bazel ikili programıyla ilgili sürüm ayrıntılarını (ör. oluşturulduğu tarih ve değişiklik listesi) yazdırır. Bu raporlar, özellikle en yeni Bazel sürümüne sahip olup olmadığınızı veya hata bildirip bildirmediğinizi belirlemek açısından 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ği için sürüm etiketi veya yayınlanan bir ikili program değilse "geliştirme sürümü". Hata bildirirken çok faydalı.

Başka bir bağımsız değişken olmadan bazel --version, Bazel sunucusunun başlatılması veya sunucu arşivinin paketinin açılması gibi yan etkileri olmadığı sürece bazel version --gnu_format ile aynı çıkışı yayınlar. bazel --version herhangi bir yerden çalıştırılabilir. Ç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 mobile-install (bazel mobil yükleme) sayfasına bakın.

Aşağıdaki seçenekler desteklenir:

--incremental

Politika 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 özellik; AndroidManifest.xml, yerel kod veya Java kaynaklarını (Class.getResource() tarafından başvurulan kaynaklar gibi) güncelleyemez. Bu şeyler değişirse bu seçenek atlanmalıdır. Bazel'in ruhunun aksine ve Android platformunun sınırlamaları nedeniyle, bu komutun ne zaman yeterince iyi olduğunu ve ne zaman tam yükleme gerektiğini bilmek kullanıcının sorumluluğundadır.

Marshmallow veya sonraki sürümlere sahip 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 işleminden sonra uygulamayı temiz durumda başlatır. --start=COLD etiketine eş değer.

--debug_app

Yükleme işleminden sonra uygulamayı temiz 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 nasıl başlatılması gerektiği. Desteklenen _start_type_ öğeleri şunlardır:

  • NO Uygulamayı başlatmaz. Bu, varsayılan değerdir.
  • COLD Yükleme işleminden sonra uygulamayı temiz durumdan başlatır.
  • WARM Ek yüklemelerde uygulama durumunu korur ve geri yükler.
  • DEBUG Yükleme işleminden sonra uygulamayı temiz durumda başlatmadan önce hata ayıklayıcıyı bekler.

--adb=path

Kullanılacak adb ikili programını gösterir.

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

--adb_arg=serial

adb için fazladan bağımsız değişkenler. Bunlar komut satırında alt komuttan önce gelir ve genellikle hangi cihaza yükleneceğini 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 öğesini şu şekilde çağırır:

adb -s deadbeef install ...

--incremental_install_verbosity=number

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

dump

dump komutu, Bazel sunucusunun dahili durumunun dökümünü stdout'a yazdırır. Bu komut esas olarak Bazel geliştiricileri tarafından kullanılmak üzere tasarlanmıştır. Bu nedenle, bu komutun çıkışı belirtilmez ve değişebilir.

Varsayılan olarak, komut yalnızca Bazel durumunun belirli alanlarını dökümde olası seçenekleri açıklayan yardım mesajını yazdırır. Dahili durumun dökümü için seçeneklerden en az biri belirtilmelidir.

Aşağıdaki seçenekler desteklenir:

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

Bellek izleme

Bazı dump komutları bellek izleme gerektirir. Bunu açmak için başlangıç işaretlerini Bazel'a 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 adresindeki Bazel'de kontrol edildi. Bu nedenle, $BAZEL öğesini Bazel deponuzu nerede saklayacağınıza göre ayarladığınızdan emin olun.

Her komutta bu seçenekleri Bazel'a iletmeyi 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 izleme 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 liste için standartlaştırılır.

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

Ö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şlemi tarafından kullanılan Java sanal makinesinin başlatılmasını etkiler ve söz konusu sunucu tarafından işlenen sonraki tüm komutlar için geçerlidir. Hâlihazırda ç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 komutunun adından ö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 çıkışını yazmak için bu konumu kullanır. Çıkış tabanı aynı zamanda istemcinin Bazel sunucusunu bulması için gereken anahtardır. Çıkış tabanını değiştirerek komutu işleyecek sunucuyu değiştirmiş olursunuz.

Varsayılan olarak çıkış tabanı, kullanıcının giriş adından ve çalışma alanı dizininin adından (aslında MD5 özetinden) türetilir. Dolayısıyla 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, iki Bazel komutu eşzamanlı olarak çalışır (&amp; kabuk operatörü nedeniyle) ve her biri farklı bir Bazel sunucusu örneği kullanır (farklı çıkış tabanları 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 bu iki istek sıralı olarak 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. Dizinin mevcut olmaması veya çağrı yapan kullanıcıya ait olması gereklidir. Geçmişte bu izin, çeşitli kullanıcılar arasında paylaşılan bir dizine işaret ediyordu ancak artık buna izin verilmiyor. Sorun #11100 giderildikten sonra bu soruna izin verilebilir.

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

Yükleme tabanı konumu, --output_user_root ve yerleştirilmiş Bazel ikililerinin MD5 kimliği temel alınarak hesaplanır.

Dosya sistemi düzeninizde daha iyi bir konum varsa Bazel'in tüm çıktıları (yükleme tabanı ve çıkış tabanı) için alternatif bir temel konum seçmek isterseniz --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. 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 da anılır), ancak derleme işareti --host_javabase (bazen "sağ taraf" --host_javabase olarak da adlandırılır) ile karışıklığa yol açmamak için yeniden adlandırıldı.

--host_jvm_args=string

Bazel'in çalıştığı Java sanal makinesine geçirilecek bir 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, bağımsız bağımsız değişkenlerle birden çok kez kullanılabilir. Bu işaretin ayarlanmasına nadiren gerek olacağını unutmayın. 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'in alt işlemleri (uygulamalar, testler, araçlar vb.) tarafından kullanılan JVM'leri etkilemez. bazel run tarafından çalıştırılan veya komut satırında bulunan JVM seçeneklerini yürütülebilir Java programlarına iletmek 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 ... işlevini 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 gelecek bağlantıyı beklemesine neden olur. Bu temel olarak Bazel geliştiricileri tarafından kullanılması amaçlanmıştır.

--autodetect_server_javabase

Bu seçenek, Bazel'in başlangıçta yüklü bir JDK'yı aramasına ve yerleştirilmiş JRE yoksa yüklü JRE'yi kullanmasına neden olur. --explicit_server_javabase, Bazel'ı çalıştırmak için açık bir JRE seçmek için kullanılabilir.

--batch

Toplu mod, Bazel'in standart istemci/sunucu modunu kullanmamasına neden olur. Bunun yerine tek bir komut için bazel Java işlemi çalıştırır. Bu mod; sinyal işleme, iş kontrolü ve ortam değişkeni devralmasıyla ilgili daha tahmin edilebilir anlamlar için kullanılır ve bazel'i bir Chrome hapishanesinde çalıştırmak için gereklidir.

Toplu modu, aynı çıkış_tabanı içinde uygun sıraya alma anlamını korur. Yani eşzamanlı çağrılar, çakışma olmadan sırayla işlenir. Çalışan bir sunucuya sahip bir istemcide toplu mod için Bazel çalıştırılırsa ilk olarak, komutu işlemeden önce sunucu sonlandırılı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 kalıcı olmasıdır. Dolayısıyla, sıralı toplu çağrılar arasında korunmaz. Bu nedenle, sürekli derlemeler gibi performansın daha az kritik olduğu durumlarda toplu modu kullanmak genellikle daha anlamlıdır.

--max_idle_secs=n

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

Bu seçenek, Bazel'i çağıran komut dosyaları tarafından, kullanıcının makinesinde Bazel sunucusu işlemlerinin başka şekilde çalışmayacağı zaman bırakmadığından emin olmak için kullanılabilir. Örneğin, gönderme öncesi komut dosyası, kullanıcının beklemedeki 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 yapmamışsa, gönderme öncesi komut dosyasının günün geri kalanında boşta kalması için Bazel sunucusu başlatması istenmeyen bir durumdur. Sorgu isteğinde küçük bir --max_idle_secs değeri belirtildiğinde, komut dosyası yeni bir sunucunun if neden olması durumunda söz konusu sunucunun hemen çıkmasını, ancak bunun yerine zaten çalışan bir sunucu varsa o sunucu normal süre boyunca boşta kalana kadar çalışmaya devam etmesini sağlayabilir. Elbette mevcut sunucunun boşta kalma zamanlayıcısı da sıfırlanır.

--[no]shutdown_on_low_sys_mem

Politika etkinleştirilirse ve --max_idle_secs pozitif bir süreye ayarlanırsa derleme sunucusu bir süre boşta kaldığında sistemde bellek azaldığında sunucuyu kapatın. Yalnızca Linux.

Derleme sunucusu, max_idle_secs değerine karşılık gelen bir boşta kalma kontrolü çalıştırmaya ek olarak, sunucu bir süre boşta kaldığında kullanılabilir sistem belleğini izlemeye başlar. Kullanılabilir sistem belleği kritik derecede azalırsa sunucudan çıkı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 alıp işleme koyamazsa yanlışlıkla çıkar.

Geliştiriciler aynı istemcideki başka bir Bazel komutunun neden olduğu uzun bekleme durumlarını önlemek için bu özelliği gönderme öncesi kontrollerde kullanabilir.

--io_nice_level=n

En iyi çaba KS planlaması için 0-7 arasında bir seviye ayarlar. 0 en yüksek öncelik, 7 ise en düşük önceliktir. Beklentiyi temel alan planlayıcı, yalnızca 4 numaralı önceliği dikkate alabilir. Negatif değerler yoksayılır.

--batch_cpu_scheduling

Bazel için batch CPU planlamasını kullanın. Bu politika, etkileşimsiz olan ancak güzel değerini azaltmak istemeyen iş yükleri için yararlıdır. Bkz. "man 2 sched_setscheduler". Bu politika, Bazel işleme hızı pahasına daha iyi sistem etkileşimi sağlayabilir.

Çeşitli seçenekler

--[no]announce_rc

Bazel'ın başlatma sırasında başlangıç seçeneklerini ve bazelrc dosyalarından okunan komut seçeneklerini duyurup duyurulmayacağını kontrol eder.

--color (yes|no|auto)

Bu seçenek, Bazel'in ekrandaki çıkışını vurgulamak için renkler kullanıp kullanmayacağını belirler.

Bu seçenek yes değerine ayarlanırsa renk çıkışı etkinleştirilir. Bu seçenek auto değerine ayarlanırsa Bazel, renk çıkışını yalnızca çıkış bir terminale gönderiliyorsa ve TERM ortam değişkeni dumb, emacs veya xterm-mono dışında bir değere ayarlanmışsa kullanır. Bu seçenek no değerine ayarlanırsa çıkışın bir terminale gidip gitmediğine 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. Geçerli command için, böyle bir bölüm varsa command:name öğesindeki seçenekleri de alır. Çeşitli yapılandırma bölümlerinden işaret eklemek için birden çok kez belirtilebilir. Genişletmeler diğer tanımlara işaret edebilir (örneğin, genişletmeler zincirlenebilir).

--curses (yes|no|auto)

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

Bu seçenek yes değerine ayarlanırsa imleç denetimlerinin kullanımı etkinleştirilir. Bu seçenek no değerine ayarlanırsa imleç denetimlerinin kullanımı 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

Belirtilmesi durumunda, Bazel tarafından oluşturulan her mesaja mesajın gösterildiği saati belirten bir zaman damgası eklenir.