Komutlar ve Seçenekler

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 .

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. Etiketlerden daha esnek bir söz dizimi kullanırlar. Bu söz dizimi, Oluşturulacak hedefleri belirtme bölümünde açıklanmıştır.

Seçenekler

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

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

Paket konumu

--package_path

Bu seçenek, belirli bir 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 kapsayıcı bazel dizine göre alınır. Ö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 dizine 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 cd komutuyla /home/bob/clients/bob_client/bazel/foo dizine giderseniz paketler /home/bob/clients/bob_client/bazel/foo dizininden çözülür.

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

Bazel, paketlerin mevcut 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, 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ı olarak 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ı dikkate alınmaz.

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. C, C++ veya derleyici kodunu ön işleme, derleme ve/veya derleme için her çağrıldığında bağımsız değişken derleyiciye iletilir. 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 konuma bağımlı olmayan 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, exec yapılandırmasında derlenen C kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişken 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, exec yapılandırmasında derlenen C++ kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişken alır. Bu, --cxxopt seçeneğine benzer ancak yalnızca yürütücü 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. Bu, --linkopt seçeneğine benzer ancak yalnızca exec yapılandırması için geçerlidir.

--conlyopt=cc-option

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

Bu --copt 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 ile benzer ancak yalnızca C++ derlemesi için geçerlidir, C derlemesi veya bağlama için geçerli değildir. Bu nedenle, --cxxopt kullanarak C++'ya özgü seçenekleri (-fpermissive veya -fno-implicit-templates gibi) iletebilirsiniz.

Örneğin:

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

--linkopt=linker-option

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

Bu, --copt işlevine benzer ancak yalnızca bağlantı oluşturma için geçerli olup derleme için geçerli değildir. Bu nedenle, yalnızca bağlantı sırası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 cc_library.linkopts parametresine de bakın.

--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 bilgilerinin hiçbir zaman kaldırılmayacağı 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 kaldırı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 ileterek Bazel'a iletebilirsiniz. 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 çıkarma işlemi uygular.

--stripopt=strip-option

Bu, *.stripped ikili dosyası oluştururken strip komutuna iletilen ek bir seçenektir. Varsayılan değer -S -p'tir. Bu seçenek birden çok kez kullanılabilir.

--fdo_instrument=profile-output-dir

--fdo_instrument seçeneği, oluşturulan C/C++ ikili programı yürütüldüğünde FDO (geri bildirim 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, FDO'ya göre optimize edilmiş derlemeyi etkinleştirmek için profil ağacı sıkıştırılmalı ve --fdo_optimize=profile-zip Bazel seçeneğine sağlanmalı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 profili 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 11'dir. --> Olası değerler 8, 9, 10, 11, 14 ve 15'tir. Bu değerler, default_java_toolchain kullanılarak özel Java araç zincirleri kaydedilerek genişletilebilir.

--tool_java_language_version=version

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

--java_runtime_version=version

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

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

JDK 11'i uzak bir depodan indirip Java uygulamasını bu sürümü kullanarak çalıştırır.

Varsayılan değer local_jdk'tür. Olası değerler: local_jdk, local_jdk_version, remotejdk_11 ve remotejdk_17. local_java_repository veya remote_java_repository depolama alanı kurallarını kullanarak ö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 iletilmesine olanak tanır. Tek bir büyük bağımsız değişkenle veya 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 ikililerini 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 yerleşik varsayılan seçeneklerinden sonra ve kural başına seçeneklerden önce javac'a iletilir. Herhangi bir Javac seçeneğinin son spesifikasyonu kazanır. Javac için varsayılan seçenekler şunlardır:

  -source 8 -target 8 -encoding UTF-8

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

Bu seçenek, javac'ın eksik doğrudan bağımlılıkları kontrol edip etmediğini kontrol eder. Java hedefleri, doğrudan kullanılan tüm hedefleri bağımlılık olarak açıkça belirtmelidir. 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'nin 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 yapı oluşturma

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 veya özellikle -c opt olarak kısaltılır) fastbuild, dbg veya opt bağımsız değişkeni alır ve optimizasyon düzeyi ve hata ayıklama tablolarının eksiksizliği gibi çeşitli C/C++ kod oluşturma seçeneklerini etkiler. Bazel, her farklı derleme modu için farklı bir çıkış dizini kullanır. Böylece, her seferinde tam yeniden derleme yapmanıza gerek kalmadan modlar arasında geçiş yapabilirsiniz.

  • fastbuild, mümkün olduğunca hızlı derleme anlamına gelir: minimum hata ayıklama bilgisi oluşturun (-gmlt -Wl,-S) ve optimize etmeyin. 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 dosyaları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 geçerli olur.

--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'e extra_actions için planlanacak hedef grubunu filtrelemesini söyler.

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 kapatma sürecindeki tüm extra_actions işlemleri yürütülmek üzere planlanır. --experimental_extra_action_filter, planlamayı, sahibinin etiketinin belirtilen normal ifadeyle eşleştiği extra_actions ile sınırlandırır.

Aşağıdaki örnekte, extra_actions planlaması yalnızca sahibinin etiketinde "/bar/" bulunan işlemler için geçerli olacak şekilde sınırlandırılmıştır:

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

--host_cpu=cpu

Bu seçenek, ana makine araçları 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 dosyasının 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 ifadelerinden hiçbiriyle eşleşmeyen bir etikete veya yürütme yoluna sahip tüm C++ dosyaları, belirtilen seçeneklerle derlenir. 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. Platforma bağlı ön ekler de buna dahildir.

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ı bir dizin altındaki 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 simgeleriyle seçmeli olarak derlenirse simgeler bağlantı sırasında kaldırılabilir. Bu, --strip=never ayarlanarak önlenebilir.

Söz dizimi: [+-]regex[,[+-]regex]...@option[,option]... Burada regex, dahil edilen kalıpları tanımlamak için +, hariç tutulan kalıpları tanımlamak için - ön ekiyle eklenebilen bir normal ifadeyi temsil eder. option, C++ derleyiciye aktarılan 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ç //foo/ içindeki tüm .cc dosyaları için C++ derleyicisinin komut satırına -O0 ve -fprofile-arcs seçeneklerini ekler.

--dynamic_mode=mode

Derleme kurallarındaki linkstatic özelliği ile etkileşime geçerek C++ ikili dosyalarının dinamik olarak bağlanıp bağlanmayacağını belirler.

Modlar:

  • auto: Platforma bağlı bir moda dönüşür; linux için default, cygwin için off.
  • default: Bazel'in dinamik olarak bağlanıp bağlanmayacağını seçmesine olanak tanır. Daha fazla bilgi için linkstatic adresine göz atın.
  • fully: Tüm hedefleri dinamik olarak bağlar. Bu, bağlama süresini hızlandırır ve ortaya çıkan ikili dosyaların boyutunu azaltır.
  • off: Tüm hedefleri çoğunlukla statik modda bağlar. linkopts parametresinde -static ayarlanırsa hedefler tamamen statik olarak değişir.

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

C++ hata ayıklama bilgilerini, normalde yazılacağı .o dosyaları yerine özel .dwo dosyalarına yazan Fission'u etkinleştirir. Bu, bağlantıların giriş boyutunu önemli ölçüde azaltı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, Bölünme özelliği 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 belirler. Daha fazla bilgi için ilgili kuralın dokümanlarına bakın. Varsayılan olarak kapalıdır.

--custom_malloc=malloc-library-target

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

--crosstool_top=label

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

--host_crosstool_top=label

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

--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, bu hedefler için --crosstool_top değerinin üzerine yazar.

--android_crosstool_top=label

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

--compiler=version

Bu seçenek, derleme sırasında ikili programların 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 doğrudan belirtilmemelidir.

Bu seçenek, Android ile ilgili kuralları derlemek 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

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

--host_java_toolchain=label

Belirtilmezse bazel, derleme sırasında çalıştırılan araçlar gibi bir yürütme yapılandırmasında kodu derlemek için --java_toolchain değerini kullanır. Bu işaretin temel amacı, çapraz derlemeyi etkinleştirmektir.

--javabase=(label)

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

--host_javabase=label

Bu seçenek, temel Java kurulumunun etiketini exec yapılandırmasında (ör. JavaBuilder ve Singlejar gibi ana makine derleme araçları için) kullanılacak şekilde ayarlar.

Bu işlem, Java kaynak dosyalarını derlemek için kullanılan Java derleyiciyi seçmez. Derleyici, --java_toolchain seçeneğindeki ayarlardan seçilebilir.

Yürütme stratejisi

Bu seçenekler, Bazel'in derlemeyi nasıl yürüteceğini etkiler. Bu değişikliklerin, derleme işlemi tarafından oluşturulan çıkış dosyaları üzerinde önemli bir etkisi 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şlemler olarak yürütülmesine neden olur. Bu değerin desteği sonlandırılmıştır. Lütfen bunun yerine local sütunlarını kullanın.
  • sandboxed, komutların yerel makinedeki bir korumalı alanda yürütülmesine neden olur. Bunun için tüm giriş dosyalarının, veri bağımlılıklarının ve araçların srcs, data ve tools özelliklerinde doğrudan bağımlılık olarak listelenmesi gerekir. Bazel, korumalı alana alınan yürütmeyi destekleyen sistemlerde, yerel korumalı alana almayı varsayılan olarak etkinleştirir.
  • local, komutların yerel alt işlemler olarak yürütülmesine neden olur.
  • worker, varsa kalıcı bir işleyici kullanılarak komutların 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 eder. --spawn_strategy (ve Genrule kısaltması içeren --genrule_strategy) seçeneğini kısaltma bazında 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, açıklamaları belirli bir regex_filter ile eşleşen komutları yürütmek için hangi stratejinin kullanılacağını belirtir. regex_filter eşleşmesi hakkında ayrıntılı bilgi 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 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, "//foo/bar/baz derleniyor" komutunu sandboxed stratejisiyle çalıştırır ancak sırayı tersine çevirerek local ile çalıştırı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üren testler) ilgili ilerleme raporunu düzenli aralıklarla yazdırır. Bu seçenek, raporlama sıklığını belirler. İlerleme durumu n saniyede bir yazdırılır.

Varsayılan değer 0'dır. Bu, artımlı bir algoritma anlamına gelir: İlk rapor 10 saniye sonra, ardından 30 saniye sonra yazdırılır ve bundan sonra ilerleme durumu her dakika bir 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 yerel olarak çalıştırılacak derleme ve test etkinliklerini planlarken dikkate alabileceği yerel kaynak miktarını (MB cinsinden RAM ve mantıksal CPU çekirdeği 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, tüm hedeflerin çalışma dosyası ağaçlarını derleme ek yükü olmadan derlenip derlenmediğini doğrulamak için faydalı olabilir.

Testler (veya uygulamalar) çalıştırıldığında, çalışma zamanındaki 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 çalıştırma sırasında, $TEST_SRCDIR/workspace/packagename/filename biçimindeki yollar kullanılarak çalışma dosyalarına erişilebilir. Çalıştırma dosyası ağacı, testlerin, açıklanmış bağımlılıklarının olduğu tüm dosyalara erişmesini sağlar ve başka hiçbir şeye erişmesine izin vermez. Varsayılan olarak, çalışma dosyası ağacı, gerekli dosyalara yönelik bir dizi sembolik bağlantı oluşturarak uygulanır. Bağlantı grubu büyüdükçe bu işlemin maliyeti de artar. Bazı büyük derlemelerde, özellikle her testin (veya uygulamanın) kendi çalışma dosyası ağacını gerektirmesi nedeniyle genel derleme süresine önemli ölçüde katkıda bulunabilir.

--[no]build_runfile_manifests

Varsayılan olarak etkin olan bu seçenek, çalışma dosyası manifestlerinin çıkış ağacına yazılıp yazılmayacağını belirtir. Bu özelliği devre dışı bırakmak --nobuild_runfile_links anlamına gelir.

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, analiz önbelleğini yürütme başlamadan hemen önce atar. Böylece yürütme aşaması için ek bellek (yaklaşık %10) ayrı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, önkoşulları başarıyla oluşturulmuş her hedefi oluşturmaya çalışır ancak hataları yoksayar.

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, Bazel tarafından java_library hedeflerinin derlenme ş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ıfın bedenleri veya özel üyeleri ile ilgili değişiklikler yapıldığında yeniden derlemenin önlenmesi mümkün olur.

--[no]interface_shared_objects

Bu seçenek, arayüz paylaşılan nesnelerini etkinleştirir. Bu sayede ikili dosyalar ve diğer paylaşılan kitaplıklar, paylaşılan nesnenin uygulanması yerine arayüzüne bağlı olur. 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 (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

Belirtiliyse Bazel yalnızca boyutları, zaman aşımı, etiket veya dil nedeniyle filtrelenmeyen *_test ve test_suite kurallarını çalıştırmak için gerekenleri oluşturur. Belirtilen 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 hatalarını algılayamayabileceğinden bu bilgi faydalıdır.

--[no]check_up_to_date

Bu seçenek, Bazel'in derleme yapmamasına, yalnızca belirtilen tüm hedeflerin güncel olup olmadığını kontrol etmesine neden olur. Bu durumda derleme, her zamanki gibi başarıyla tamamlanır. Bununla birlikte, herhangi bir dosya 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 --check_tests_up_to_date adresini de inceleyin.

--[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/oluşturma/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, geçerli çalışma dizine göre bir dosya hedefi etiketi veya düz dosya adı olmalıdır ve her kaynak dosya adına bağlı bir kural oluşturulur. C++ ve Java kaynakları için aynı dil alanındaki kurallar tercihen seçilir. Aynı tercihe sahip birden fazla kural varsa BUILD dosyasında ilk görünen kural seçilir. Kaynak dosyaya atıfta bulunmayan, açıkça adlandırılmış bir hedef kalıbı hataya neden olur.

--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 dosyalar 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 kullanılabilir.

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.

Bazel, testleri çalıştırırken bu filtreyle eşleşmese bile derlenen ve çalıştırılan test hedefleri için --build_tag_filters değerini yoksayar. Bu tür raporlar oluşturmamak için test hedeflerini --test_tag_filters kullanarak veya açıkça hariç tutarak filtreleyin.

--test_size_filters=size[,size]*

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

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

ve

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

yalnızca //foo içindeki küçük ve orta boyutlu testleri test eder.

Varsayılan olarak test boyutu filtreleme 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ı filtreleme 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 etiket filtresi, etiket anahtar kelimelerinin virgülle ayrılmış listesi olarak belirtilir ve isteğe bağlı olarak hariç tutulan etiketleri belirtmek için "-" işareti ile başlar. 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. Testin size ve local etiketlerine göre de bu şekilde filtreleme yapabileceğinizi unutmayın.

--test_lang_filters=string[,string]*

Test kuralı sınıflarının adlarına atıfta bulunan, virgülle ayrılmış bir dize listesi 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 hariç //baz/...'teki tüm hedefleri test eder.

--test_filter=filter-expression

Test çalıştırıcısının çalıştırılacak testlerin bir alt kümesini seçmek için kullanabileceği bir filtreyi belirtir. Çağrıda belirtilen tüm hedefler 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. Bir glob, alt dize veya normal ifade olabilir. --test_filter, farklı --test_arg filtre bağımsız değişkenlerini iletmek için kullanışlı bir yöntemdir 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'ün yürütme aşamasındaki bağımlılık kontrolcünün her derleme adımı için neden yürütüldüğünü veya güncel olduğunu açıklamasına neden olur. Açıklama logfile dosyasına yazılır.

Beklenmedik yeniden oluşturmalarla karşılaşıyorsanız bu seçenek, sorunun nedenini anlamanıza yardımcı olabilir. Ardından, beklenmedik bir şekilde yürütülen bir yürütme adımı gördüğünüzde günlüğü inceleyin. Bu seçenek, performans açısından küçük bir cezaya neden olabilir. Bu nedenle, artık gerekli olmadığında bu seçeneği kaldırabilirsiniz.

--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şturulmak için kullanılan komut değiştiği için yeniden oluşturulursa açıklama dosyasında yer alan çıkış, yeni komutun tüm ayrıntılarını içerir (en azından çoğu komut için).

Bu seçeneğin kullanılması, oluşturulan açıklama dosyasının uzunluğunu ve --explain 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österilmesine neden olur ve varsayılan olarak etkindir. Devre dışı bırakıldığında ilerleme durumu mesajları engellenir.

--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çeneğin varsayılan değeri 0,02'dir. Yani bazel, ilerleme mesajlarını 0,02 saniyede bir mesajla 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ılı bir şekilde 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 belirtilmişse 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 edilmesini sağlar. --show_result, tam sonuç bilgilerinin bası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, bağımsız hedefler için sonuç bilgisi gösterilmez. Dolayısıyla sıfır, sonuç bilgisinin her zaman atlanmasına neden olur. Ç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 (ör. derleme-düzenleme-test döngüsü sırasında) ve büyük bir hedef grubu (ör. yeni bir çalışma alanı oluştururken veya geriye dönük testler çalıştırırken) arasında düzenli olarak geçiş yapıyorsa bu iki değer arasında bir değer seçebilir. İlk durumda sonuç bilgileri çok yararlıyken ikinci durumda daha az yararlıdır. Tüm seçeneklerde olduğu gibi bu, .bazelrc dosyası aracılığıyla dolaylı 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, Bazel'in işlem yürütmek için korumalı alan kullanırken ek 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 komutu yürütmeden ö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. (Kavrayıcı parantezler, kabuğunuzu cd ve exec çağrılarına karşı korumak için sağlanmıştır; bunları kopyaladığınızdan emin olun!) Bununla birlikte, sembolik bağlantı ağaçları oluşturma gibi bazı komutlar Bazel içinde dahili olarak uygulanır. Bunlar için görüntülenecek komut satırı yoktur.

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

Aşağıdaki --verbose_failures seçeneğini de inceleyin.

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 komutlar, Bourne kabuğuyla uyumlu bir söz diziminde yazdırılır. Bu söz dizimi, kabuk isteminde kopyalanıp yapıştırılmak için uygundur.

Çalışma alanı durumu

Bazel ile derlenmiş ikili dosyaları "damgalamak" için bu seçenekleri kullanın: ikili dosyalara kaynak denetimi düzeltmesi veya Workspace ile ilgili diğer bilgiler gibi ek bilgiler yerleştirmek için. Bu mekanizmayı stamp özelliğini destekleyen kurallarla (ör. genrule, cc_binary) 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 bir programın yolu olmalıdır. Linux/macOS'te bu, herhangi bir yürütülebilir 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ş) yazdırmalı ve ardından sıfır değerini döndürerek çıkmalıdır (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, anahtarı değerden ayırır. Değer, satırın geri kalanıdır (ek boşluklar dahil). Anahtar veya değer birden fazla satırı kaplamamalıdır. Anahtarlar yinelenmemelidir.

Bazel, anahtarları "kararlı" ve "değişken" olmak üzere iki gruba ayırır. ("İstikrarlı" ve "değişken" adları biraz mantıksızdır, bu yüzden bunlar hakkında fazla düşünmeyin.)

Bazel daha sonra 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 anahtarların geri kalanını ve değerlerini içerir

Sözleşme şu şekildedir:

  • "Kararlı" anahtarların değerleri mümkünse nadiren değişmelidir. bazel-out/stable-status.txt içeriği değişirse Bazel, bu içeriğe 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 değişir ve Bazel'in her derlemede damgalı işlemleri yeniden çalıştırmasına neden olur.

    Bazel her zaman aşağıdaki kararlı anahtarları döndürür:

    • 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. Ancak, damgalanmış işlemlerin her zaman yeniden çalıştırılmasını önlemek için Bazel, değişken dosyanın hiç değişmediğini varsayar. Bir başka 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ı döndürür:

    • 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çimlendirildi.

Linux/macOS'te, true hiçbir şey yapmadığı (sıfırla çıkar) ve çıktı yazdırmadığı için çalışma alanı durumunu devre dışı bırakmak için --workspace_status_command=/bin/true öğesini iletebilirsiniz. Windows'da aynı etki için MSYS'nin true.exe yolunu iletebilirsiniz.

Workspace durumu komutu herhangi bir nedenle başarısız olursa (sıfır olmayan bir değerle çıkarsa) 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ılar için lütfen Derleme Ansiklopedisi'ne bakın. Bir kural stamp = -1 değerini (*_binary kuralları için varsayılan değer) ayarlarsa bu seçenek, damga basma özelliğinin etkin olup olmayacağını belirler.

Bazel, bu seçenekten veya stamp özelliğinden bağımsız olarak exec yapılandırması için derlenen ikili dosyaları 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ş değişkenliğini 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

Barındırıcı sistemi tanımlayan bir platform kuralının etiketi.

--extra_execution_platforms=labels

İşlemleri çalıştırmak için yürütme platformu olarak kullanılabilen platformlar. Platformlar, tam hedefe göre veya bir hedef kalıbı olarak belirtilebilir. Bu platformlar, register_execution_platforms() tarafından WORKSPACE dosyasında tanımlanan platformlardan önce dikkate alınır. Bu seçenek, öncelik sırasına göre platformların virgülle ayrılmış bir 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

Zincir araç türü normal ifadeyle eşleşirse zincir araçları 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 hata ayıklama hataları yaşamalarına yardımcı olabilir.

Çeşitli

--flag_alias=alias_name=target_path

Daha uzun Starlark derleme ayarlarını daha kısa bir ada bağlamak için kullanılan bir kolaylık işareti. Daha fazla bilgi için Starlark Yapılandırmaları başlıklı makaleyi inceleyin.

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

Sembolik bağlantılar herhangi bir nedenle oluşturulamazsa bir uyarı gösterilir ancak derleme yine de başarılı kabul edilir. Özellikle, bu şekilde salt okunur bir dizin veya yazma izninizin olmadığı bir dizin oluşturabilirsiniz. Derleme işleminin sonunda bilgi mesajlarında yazdırılan tüm yollar, yalnızca sembolik bağlantılar beklenen konumu gösteriyorsa sembolik bağlantıya göre kısa biçimi kullanır. Diğer bir deyişle, sembolik bağlantıların oluşturulduğundan emin olmasanız bile bu yolların doğruluğundan emin olabilirsiniz.

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

  • Sembol bağlantısı oluşturmayı engelle: --symlink_prefix=/, Bazel'in bazel-out ve bazel-<workspace> sembol bağlantıları da dahil olmak üzere hiçbir sembol bağlantısı oluşturmasına veya güncellemesine neden olmaz. Simge bağlantısı 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 eksiksiz olması için belgelenmiştir.

--starlark_cpu_profile=_file_

Değeri bir 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ükleme ve analizin yavaşlamasına neden olan Starlark işlevlerini belirlemek için bu seçeneği kullanın. Örneğin:

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

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

Sürümler için Bazel'i 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 kullanan sürüm mühendisleri için ipuçları listesi verilmiştir.

Ö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ırma için derlemeleri yönetmek amacıyla her derlemeyi "64 bit" ve "32 bit" gibi farklı bir tanımlayıcıyla ayırt etmek yararlı olabilir. Bu seçenek, bazel-bin (vb.) sembolik bağlantılarını birbirinden ayırır.

Test çalıştırma

bazel ile test oluşturmak ve çalıştırmak için bazel test'yi ve ardından 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" (otomatik) olarak ayarlanırsa (varsayılan) Bazel yalnızca aşağıdaki koşullardan biri geçerliyse bir 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.

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

"Evet" ise önbelleğe alma davranışı, test hatalarını ve --runs_per_test ile test çalıştırma işlemlerini önbelleğe alabilmesi dışında otomatik ile aynı olur.

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

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

Bu seçenek, göndermeden önce yapılacak 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 dakikada çalışan bir testin zaman aşımı ETERNAL veya LONG (SONSUZ) olmamalıdır.

Bu seçenek, kullanıcıların iyi bir zaman aşımı değerine karar vermesine veya mevcut zaman aşımı değerlerini kontrol etmesine yardımcı olmak için 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, devam eden çağrılar iptal edilir. Hem --notest_keep_going hem de --keep_going belirtilmemelidir.

--flaky_test_attempts=attempts

Bu seçenek, bir testin herhangi bir nedenle başarısız olması durumunda maksimum deneme sayısını belirtir. Başlangıçta başarısız olan ancak sonunda başarılı olan bir test, test özetinde FLAKY olarak raporlanır. Bununla birlikte, Bazel çıkış 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 kabul edilir.

Varsayılan olarak (bu seçenek belirtilmediğinde veya varsayılan olarak ayarlandığında), normal testler için yalnızca tek bir denemeye, flaky özelliği ayarlanmış test kuralları için ise 3 denemeye izin verilir. Test denemelerinin maksimum 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 bir testin kaç kez çalıştırılacağını 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:

  • Bu parametre yoksa başarısız olan tüm çalıştırmalar 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, regex@number söz dizimi kullanılarak normal ifade de 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 belirtilmez) Bazel, --runs_per_test aracılığıyla kararsız test parçaları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 durum raporlar.

--test_summary=output_style

Test sonucu özetinin nasıl gösterileceğ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 başarısız olan 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. Başarısız testlerin çıkış günlük dosyası adını da 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 yalnızca 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. Yukarıdaki özet çıktısına göre derleme sırasında bir özet yazdırır.
  • all, errors ile benzerdir ancak başarılı olanlar da dahil olmak üzere tüm testlerin çıkışını 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. Her bazel test komutunun başında dizin temizlenir. Varsayılan olarak bazel bu dizini Bazel çıkış ana dizininin altına yerleştirir.

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

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

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

Zaman aşımı kategorisini boyutundan farklı olarak açıkça belirten testler, zaman aşımı boyut etiketi tarafından dolaylı olarak ayarlanmış gibi 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 olur.

--test_arg=arg

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

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

Her test için test ortamına yerleştirilmesi 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 kabuğu dize oluşturma kuralları kullanılarak kelimelere bölünür ve ardından kelime listesi, yürütülecek komutun başına eklenir.

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

Dikkat edilmesi gereken bazı noktalar:

  • Test çalıştırmak için kullanılan PATH, ortamınızdaki PATH'ten farklı olabilir. Bu nedenle, --run_under komutu (command-prefix'taki ilk kelime) için mutlak yol kullanmanız gerekebilir.
  • stdin bağlı olmadığından --run_underetkileş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'

Test seçimi

Çı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 tam olarak bazel build ile aynıdır.

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

bazel run komutu, tek bir hedef ve çalıştırmak için kullanılması dışında bazel build komutuna benzer. Tipik bir oturumu aşağıda görebilirsiniz:

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

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

bazel run, Bazel tarafından oluşturulan ikili dosyayı doğrudan çağırmaya benzer ancak aynı değildir ve davranışı, çağrılacak ikili dosyanın test olup olmadığına bağlı olarak değişir.

İkili dosya bir test değilse geçerli çalışma dizini, ikili dosyanın çalıştırma dosyaları ağacı olur.

İkili test olduğunda geçerli çalışma dizini, yürütme kökü olur ve testlerin genellikle çalıştırıldığı ortamın kopyalanması için iyi niyetli bir girişimde bulunulur. Ancak bu emülasyon mükemmel değildir ve birden fazla bölüme sahip testler bu şekilde çalıştırılamaz (bu sorunu gidermek için --test_sharding_strategy=disabled komut satırı seçeneği kullanılabilir).

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üklerin daha az karmaşık olmasını sağlamak için --ui_event_filters ve --noshow_progress işaretlerini kullanarak Bazel'in çıkışlarını engelleyebilirsiniz.

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

Testleri yürütme

bazel run, test ikililerini de çalıştırabilir. Bu, testi Test Yazma bölümünde açıklanan ortama yakın bir şekilde çalıştırma etkisine sahiptir. --test_* bağımsız değişkenlerinden hiçbirinin, --test_arg dışında bu şekilde bir test çalıştırırken 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ının çıkış dizinlerini veya bu Bazel örneği tarafından oluşturulan çalışma ağacının tamamını siler ve dahili önbellekleri sıfırlar. Herhangi bir komut satırı seçeneği olmadan yürütülürse tüm yapılandırmalar için çıkış dizini temizlenir.

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

Bir Bazel örneği tarafından oluşturulan çalışma ağacının tamamını kaldırmak için --expunge seçeneğini belirtebilirsiniz. --expunge ile çalıştırıldığında temizleme komutu, derleme çıktısı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 şunları belirtebilirsiniz:

  % bazel clean --expunge

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

clean komutu, öncelikle artık ihtiyaç duyulmayan çalışma alanlarının disk alanını geri kazanmak için sağlanır. Bazel'in artımlı yeniden derlemeleri mükemmel olmayabilir. Bu nedenle, sorun oluştuğunda tutarlı bir durumu kurtarmak için clean kullanılabilir.

Bazel'in tasarımı, bu sorunların düzeltilebilir olmasına ve bu hataların düzeltilmesinin yüksek öncelikli olmasına olanak tanır. Yanlış bir artımlı derleme bulursanız clean kullanmak yerine araçlarda hata raporu oluşturun 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 soru sormak için bir sorgu dili içerir. 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, hedef olmayan 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ılmış hedef grafiğinde çalışır ve işlemler, yapı taşları ve bunların ilişkileri hakkında bilgi sağlar.

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'te de kullanılabilen işlevlerin aynısını destekler ancak siblings, buildfiles ve tests'te de kullanılabilir.

Daha fazla bilgi için İşlem Grafiği Sorgusu başlıklı makaleyi inceleyin.

Çeşitli komutlar ve seçenekler

help

help komutu, online yardım sunar. Varsayılan olarak, Bazel ile derleme bölümünde gösterildiği gibi mevcut komutların ve yardım konularının özetini gösterir. Bir bağımsız değişken belirtmek, belirli bir konuyla ilgili ayrıntılı yardım gösterir. Konuların çoğu 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 ilgili 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ı süresinden sonra kendilerini durdurur. Bu nedenle bu komut nadiren gereklidir. Ancak belirli bir çalışma alanında başka derleme yapılmayacağı bilindiğinde komutlar için 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ı önceden 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. (Bu değerler, derlemeyi yöneten 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, sonucu sed -ne /key:/s/key://p üzerinden aktarma ihtiyacını ortadan kaldırdığı için özellikle Bazel komut dosyası yazarken 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: Mevcut kullanıcı için bu Bazel örneği tarafından kullanılan yükleme dizininin mutlak yolu. Bazel, dahili olarak gerekli olan yürütülebilir dosyalarını bu dizinin altına yükler.

  • output_base: Mevcut kullanıcı ve çalışma alanı kombinasyonu için bu Bazel örneği tarafından kullanılan temel çıkış dizininin mutlak yolu. Bazel, tüm scratch ve derleme çıkışlarını bu dizinin altına yerleştirir.

  • execution_root: output_base altındaki yürütme kök dizininin mutlak yolu. Bu dizin, derleme sırasında çalıştırılan komutların erişebildiği tüm dosyaların köküdür ve bu komutların çalışma dizinidir. Workspace dizini yazılabilir durumdaysa bu dizine işaret eden bazel-<workspace> adlı bir sembolik bağlantı 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 yolu. Çalışma alanı dizini yazabiliyorsa buraya, bu dizini işaret eden bazel-out adlı bir sembolik bağlantı yerleştirilir.

  • server_pid: Bazel sunucu sürecinin 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 süresi boyunca tüm komutlar için hata ayıklama bilgilerini içerir ve Bazel geliştiricileri ile ileri düzey kullanıcılar tarafından okunmak üzere tasarlanmıştır.

  • 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üğü 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şlatılmasından bu yana yapılan toplam çöp toplama sayısı ve bu işlemlerin gerçekleştirilmesi 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 özgü veriler

Bu veriler, bazel info ürününe 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. Simge bağlantısının varlığını varsaymak yerine bazel info tarafından bildirilen değeri kullanan komut dosyaları daha sağlamdır.
  • Tamamlanmış "Make" ortamı. --show_make_env işareti belirtilirse geçerli yapılandırmadaki "Make" ortamındaki tüm değişkenler de (CC, GLIBC_VERSION vb.) görüntülenir. Bunlar, BUILD dosyalarında $(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: Geçerli yapılandırma için bazel-bin çıkış dizini. bazel-bin sembolik bağlantısının herhangi bir nedenle oluşturulamadığı durumlarda (ör. salt okunur bir dizinden derleme yapıyorsanız) bu işlemin 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 bildirme aşamasında çok faydalıdır.

Başka bağımsız değişken içermeyen bazel --version, Bazel sunucusu başlatma veya sunucu arşivinin paketini açma yan etkisi olmadan bazel version --gnu_format ile aynı çıktıyı verir. 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

Bu ayar belirlenirse Bazel, uygulamayı artımlı olarak (yani yalnızca son derlemeden bu yana değişen bölümleri) yüklemeye çalışır. Bu işlem, AndroidManifest.xml'ten, yerel koddan veya Java kaynaklarından (Class.getResource() tarafından referans verilenler gibi) referans verilen kaynakları güncelleyemez. Bu öğeler 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ümlerin yüklü olduğu bir cihaz kullanıyorsanız --split_apks işaretini kullanabilirsiniz.

--split_apks

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

--start_app

Uygulamayı yükledikten sonra temiz bir 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 ayardır.
  • COLD Yükleme işleminden sonra uygulamayı temiz durumdan başlatır.
  • WARM Artımlı yüklemelerde uygulama durumunu korur ve geri yükler.
  • DEBUG Yüklemeden sonra uygulamayı temiz bir durumda başlatmadan önce hata ayıklayıcıyı bekler.

--adb=path

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

Varsayılan olarak, --android_sdk tarafından belirtilen Android SDK'sında adb 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üklerinin konsola yazılması için 1 değerine ayarlayın.

dump

dump komutu, Bazel sunucusunun dahili durumunun bir dökümünü stdout'a yazdırır. Bu komutun temel amacı Bazel geliştiricileri tarafından kullanılmasıdır. Bu nedenle, bu komutun çıkışı belirtilmez ve değişiklik gösterebilir.

Varsayılan olarak komut, Bazel durumunun belirli alanlarını dökmek için kullanılabilecek seçenekleri özetleyen bir yardım mesajı 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ümü alır.
  • --rules, sayılar ve işlem sayıları dahil olmak üzere her kural ve özellik sınıfı için kural özetini dökümü yapar. Buna hem yerel 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ı döker. Bunun çalışması için bellek izlemeyi etkinleştirmeniz gerekir.

Bellek takibi

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-agent, Bazel'e third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar adresinde kaydedilir. Bu nedenle, $BAZEL değerini Bazel deponuzun bulunduğu yere 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 iz profilini analiz eder.

canonicalize-flags

Bazel komutu için bir seçenek listesi alan ve aynı etkiye sahip bir seçenek listesi döndüren canonicalize-flags komutu. Yeni seçenek listesi kanoniktir. Örneğin, aynı etkiye sahip iki seçenek listesi aynı yeni listeyle 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şlangıç seçenekleri

Bu bölümde açıklanan seçenekler, Bazel sunucu işlemi tarafından kullanılan Java sanal makinesinin başlatılmasını etkiler ve bu sunucu tarafından işlenen sonraki tüm komutlar için geçerlidir. Halihazı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ı .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ı, istemcinin Bazel sunucusunu bulduğu anahtardır. Çıkış tabanını değiştirerek komutu işleyen sunucuyu değiştirirsiniz.

Varsayılan olarak çıkış tabanı, kullanıcının giriş adından ve Workspace dizininin adından (aslında MD5 özeti) türetilir. Bu nedenle, tipik bir değer şöyle 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 aynı anda (kabuk &amp; operatörü nedeniyle) çalışır ve her biri farklı bir Bazel sunucu ö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. Dizin mevcut olmamalı veya arayan kullanıcıya ait olmalıdır. 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ılması geçersiz kılınır.

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

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

--server_javabase=dir

Bazel'in çalıştığı Java sanal makinesini belirtir. Değer, JDK veya JRE içeren dizinin yolu 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, Bazel alt süreçleri tarafından kullanılan JVM'leri (ör. uygulamalar, testler, araçlar vb.) etkilemez. Bunun yerine --javabase veya --host_javabase yapılandırma 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 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 süreçleri tarafından kullanılan JVM'leri (uygulamalar, testler, araçlar vb.) 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'yi otomatik olarak aramasına ve yerleşik JRE kullanılamıyorsa yüklü JRE'ye geri dönmesine 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 mod, aynı output_base içinde doğru sıraya ekleme anlamlarını korur. Yani eşzamanlı çağrılar, çakışma olmadan sırayla işlenir. Çalışan bir sunucunun bulunduğu bir istemcide toplu modda Bazel çalıştırılırsa komut işlenmeden önce sunucu kapatı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 kalması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 sürecinin son istemci isteğinden sonra çıkmadan önce saniye cinsinden ne kadar beklemesi gerektiğini belirtir. Varsayılan değer 10800'dir (3 saat). --max_idle_secs=0, Bazel sunucu işleminin süresiz olarak devam etmesine neden olur.

Bu seçenek, Bazel'i çağıran komut dosyaları tarafından, Bazel sunucu işlemlerinin kullanıcının makinesinde aksi takdirde çalışmadığından emin olmak için kullanılabilir. Örneğin, bir göndermeden önce komut dosyası, kullanıcının bekleyen değişikliğinin istenmeyen bağımlılıklara neden olmaması için bazel query işlevini çağırabilir. Ancak kullanıcı bu çalışma alanında yakın zamanda bir derleme yapmadıysa göndermeden önce komut dosyasının, günün geri kalanında boşta kalması için bir Bazel sunucusu başlatması istenmez. Sorgu isteğinde küçük bir --max_idle_secs değeri belirtildiğinde, komut dosyası yeni bir sunucunun başlatılmasına 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

Etkinleştirilirse ve --max_idle_secs pozitif bir süreye ayarlanırsa derleme sunucusu bir süre boşta kaldıktan sonra, 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ırmanın yanı sıra sunucu bir süre boşta kaldıktan sonra kullanılabilir sistem belleğini izlemeye başlar. Kullanılabilir sistem belleği kritik düzeyde düşük olursa sunucu kapanı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 çabayla IO planlaması için 0-7 arasında bir düzey 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'in başlatma sırasında bazelrc dosyasından okunan komut seçeneklerini duyurup bildirmeyeceğini kontrol eder. (Başlangıç seçenekleri koşulsuz olarak duyurulur.)

--color (yes|no|auto)

Bu seçenek, Bazel'in ekrandaki çıktısı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 olarak ayarlanırsa Bazel, 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 renkli çıkış kullanır. Bu seçenek no olarak ayarlanırsa çıkışın bir terminale gönderilip gönderilmediğine ve TERM ortam değişkeninin ayarına bakılmaksızın renkli çı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. Birden fazla yapılandırma bölümünden 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 yöntem --color ile iyi çalışır.

Bu seçenek yes olarak 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 olarak ayarlanırsa imleç denetimlerinin kullanımı, --color=auto ile aynı koşullarda etkinleştirilir.

--[no]show_timestamps

Belirtilirse Basel tarafından oluşturulan her iletiye, iletinin gösterildiği zamanı belirten bir zaman damgası eklenir.