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, 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ılabilen seçenekler açıklanmaktadır. --long
bir yardım komutunda kullanıldığında, çevrimiçi yardım mesajları her seçeneğin anlamı, türü ve varsayılan değeri hakkında özet bilgi sağlar.
Çoğu seçenek yalnızca bir kez belirtilebilir. Birden çok kez belirtildiğinde son örnek kazanır. Birden çok kez belirtilebilen seçenekler, online yardımda "birden çok kez kullanılabilir" ifadesiyle belirtilir.
Paket konumu
--package_path
Bu seçenek, belirli bir paketin BUILD dosyasını bulmak için aranan dizin grubunu belirtir.
Bazel, paket yolunu arayarak paketlerini bulur. Bu, her biri kısmi bir kaynak ağacının kökü olan bazel dizinlerinin iki nokta işareti ile ayrılmış sıralı bir 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:
- İlk karakter
/
ise yol mutlaktır. - 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 package-path parametresindeki%workspace%
dizesi/home/bob/clients/bob_client/bazel
olarak genişletilir. - Diğer tüm değerler, çalışma dizine göre alınır.
Genellikle bunu yapmak istemezsiniz ve Bazel'i bazel çalışma alanının altındaki dizinlerden kullanırsanı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 oluşturma
% 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ükleme denemesi yapmaması gereken paketlerin virgülle ayrılmış bir listesini belirtir. Bu yöntem, paketleri gerçekten silmeden paketlerin silinmesini simüle etmek için kullanılabilir.
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 true olduğundan varsayılan olarak görünürlük kontrolü yapılır.
--output_filter=regex
--output_filter
seçeneği yalnızca normal ifadeyle eşleşen hedefler için derleme ve derleme uyarılarını gösterir. Bir hedef, verilen normal ifadeyle eşleşmezse ve yürütülmesi başarılı olursa standart çıkışı ve standart hatası atılır.
Bu seçenek için bazı tipik değerler aşağıda verilmiştir:
`--output_filter='^//(first/project|second/project):'` | Belirtilen paketlerin çıkışını gösterin. |
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` | Belirtilen paketlerin çıkışını göstermez. |
`--output_filter=` | Her şeyi göster. |
`--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ı oluştururken iletilmez.
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, ana makine yapılandırmasında derlenen kaynak dosyalar için derleyiciye iletilecek bir bağımsız değişkeni alır. Bu, --copt
seçeneğine benzer ancak yalnızca ana makine yapılandırması için geçerlidir.
--host_conlyopt=cc-option
Bu seçenek, ana makine 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 ana makine yapılandırması için geçerlidir.
--host_cxxopt=cc-option
Bu seçenek, ana makine 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 ana makine yapılandırması için geçerlidir.
--host_linkopt=linker-option
Bu seçenek, ana makine 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 ana makine 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şken 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şturulurken derleyiciye iletilecek bağımsız değişkeni alır.
Bu, --copt
'e benzer ancak yalnızca bağlantı oluşturma için geçerlidir, derleme için geçerli değildir. Böylece, yalnızca bağlantı anında anlamlı olan derleyici seçeneklerini (-lssp
veya -Wl,--wrap,abort
gibi) --linkopt
kullanarak iletebilirsiniz. Örneğin:
% bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code
Derleme kuralları, özelliklerinde bağlantı seçeneklerini de 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, Bazel'in -Wl,--strip-debug
seçeneğiyle bağlayıcıyı çağırarak tüm ikili dosyalardan ve paylaşılan kitaplıklardan hata ayıklama bilgilerini kaldırıp kaldırmayacağını belirler.
--strip=always
, hata ayıklama bilgilerinin her zaman kaldırılacağı anlamına gelir.
--strip=never
, hata ayıklama bilgilerini asla çıkarmayacağı anlamına gelir.
--strip=sometimes
değerinin varsayılan değeri, --compilation_mode
fastbuild
ise sarmalama anlamına gelir.
% bazel build --strip=always //foo:bar
, oluşturulan tüm ikili dosyalardan hata ayıklama bilgilerini kaldırırken hedefi derleyecektir.
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 simgeleri kaldırmak istiyorsanız ld'nin --strip-all
seçeneğini kullanmanız gerekir. Bunu yapmak için --linkopt=-Wl,--strip-all
değerini Bazel'e iletmeniz gerekir. Ayrıca Bazel'in --strip
işaretini ayarladığınızda --linkopt=-Wl,--strip-all
işaretinin geçersiz kılınacağını unutmayın. Bu nedenle, yalnızca birini ayarlamanız gerekir.
Yalnızca tek bir ikili dosya oluşturuyorsanız ve tüm sembollerin kaldırılmasını istiyorsanız --stripopt=--strip-all
parametresini iletebilir ve hedefin //foo:bar.stripped
sürümünü açıkça derleyebilirsiniz. --stripopt
bölümünde açıklandığı gibi, bu işlem, stripping işlemini derlemenin tüm bağlantı işlemlerine dahil etmek yerine nihai ikili bağlandıktan sonra bir stripping işlemi uygular.
--stripopt=strip-option
Bu, *.stripped
ikili programı oluştururken strip
komutuna iletmek için kullanılan ek bir seçenektir. Varsayılan değer -S -p
'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ı için profil bilgilerini içeren .gcda dosyalarının nesne başına dosya dizini ağacı için dizin ön eki olarak kullanılır.
Profil veri ağacı oluşturulduktan sonra,
profil ağacı sıkıştırılmalı ve FDO için optimize edilmiş derlemenin etkinleştirilmesi için
--fdo_optimize=profile-zip
Bazel seçeneğine sunulmalıdır.
LLVM derleyicisi için bu bağımsız değişken, ham LLVM profil veri dosyalarının döküldüğü 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ı için 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.
--[no]output_symbol_counts
Etkinleştirilirse C++ yürütülebilir ikilisinin her altın çağrılan bağlantısı, --print-symbol-counts
altın seçeneği aracılığıyla bir simge sayısı dosyası oluşturur. Dosya, her bir bağlayıcı girişi için tanımlanan simgelerin sayısını ve ikili dosyada kullanılan simgelerin sayısını günlüğe kaydeder.
Bu bilgiler, gereksiz bağlantı bağımlılıkları izlemek için kullanılabilir.
Sembol sayıları dosyası, ikili programın çıkış yoluna [targetname].sc
adıyla yazılır.
Bu seçenek varsayılan olarak devre dışıdır.
--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
derleyip yalnızca Java 8 spesifikasyonuyla uyumlu yapılara izin verir.
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
bir uzak depodan JDK 11'i indirir ve onu kullanarak Java uygulamasını çalıştırır.
Varsayılan değer localjdk
'tür.
Olası değerler: localjdk
, localjdk_version
,
remotejdk_11
ve remote_jdk17
.
local_java_repository
veya remote_java_repostory
depolama alanı kurallarını kullanarak özel JVM kaydederek değerleri genişletebilirsiniz.
--tool_java_runtime_version=version
Derleme sırasında ihtiyaç duyulan araçları çalıştırmak için kullanılan JVM sürümü.
Varsayılan değer remotejdk_11
'tür.
--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'a ayarlar.
--javacopt=javac-option
Bu seçenek, seçenek bağımsız değişkenlerinin javac'a 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 --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. javac için herhangi bir seçeneğin son spesifikasyonu kazanır. javac için varsayılan seçenekler şunlardır:
-source 8 -target 8 -encoding UTF-8
--strict_java_deps (default|strict|off|warn|error)
Bu seçenek, javac'ın eksik doğrudan bağımlılıkları kontrol edip etmediğini kontrol eder. Java hedefleri, doğrudan kullanılan tüm hedefleri bağımlılık olarak açıkça belirtmelidir. Bu işaret, javac'a her Java dosyasının türü kontrol edilirken kullanılan gerçek jar dosyalarını belirlemesini ve geçerli hedefin doğrudan bağımlılığının çıkışı değilse uyarı/hata vermesini söyler.
off
, kontrolün devre dışı olduğu anlamına gelir.warn
, javac'ın eksik her doğrudan bağımlılık için[strict]
türündeki standart Java uyarıları oluşturacağı anlamına gelir.default
,strict
veerror
seçeneklerinin tümü, javac'ın uyarı yerine hata oluşturacağı anlamına gelir. Bu da, eksik doğrudan bağımlılık bulunursa geçerli hedefin derlenmesinin başarısız olması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
, olabildiğince hızlı derleme yapmak: minimum hata ayıklama bilgisi (-gmlt -Wl,-S
) oluşturmak ve optimizasyon yapmamak anlamına gelir. Bu varsayılan ayardır. Not:-DNDEBUG
ayarlanmaz.dbg
, gdb'yi (veya başka bir hata ayıklayıcıyı) kullanabilmeniz için hata ayıklama özelliği etkinleştirilmiş şekilde (-g
) derleme anlamına gelir.opt
, optimizasyonun etkin olduğu veassert()
ç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 bilgileriopt
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 true (doğru) değerine ayarlanırsa --experimental_action_listener
komut satırı seçeneğiyle belirtilen ek işlemler yalnızca üst düzey hedefler için planlanır.
--experimental_extra_action_filter=regex
experimental_extra_action_filter
seçeneği, Bazel'a extra_actions
için planlanacak hedef grubunu filtrelemesi talimatını verir.
Bu işaret yalnızca --experimental_action_listener
işaretiyle birlikte kullanılabilir.
Varsayılan olarak, istenen derlenecek hedeflerin geçişli kapatma kümesinde bulunan tüm extra_actions
'ler yürütme için planlanır.
--experimental_extra_action_filter
, planlamayı extra_actions
ile kısıtlar ve sahibin etiketi belirtilen normal ifadeyle eşleşir.
Aşağıdaki ö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ını oluşturmak için kullanılması gereken CPU mimarisinin adını belirtir.
--fat_apk_cpu=cpu[,cpu]*
android_binary
kurallarının geçişli deps
için C/C++ kitaplıkları oluşturacak CPU'lar. Diğer C/C++ kuralları etkilenmez. Örneğin, bir android_binary
kuralının ve bir cc_binary
kuralının geçişli deps
özelliğinde bir cc_library
varsa cc_library
en az iki kez oluşturulur: android_binary
kuralı için --fat_apk_cpu
ile belirtilen her CPU için bir kez ve cc_binary
kuralı için --cpu
ile belirtilen CPU için bir kez.
Varsayılan değer: armeabi-v7a
.
--fat_apk_cpu
ile belirtilen her CPU için bir .so
dosyası oluşturulur ve APK'ya paketlenir. .so
dosyasının adında, android_binary
kuralının adı "lib" ile başlar. Örneğin, android_binary
öğesinin adı "foo" ise dosya libfoo.so
olur.
--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...
Mevcut olduğunda, dahil etme normal ifadesi ifadelerinden biriyle eşleşen ve hariç tutma 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.
Bazel, oluşturulan dosyalarla (ör. genrule çıkışları) eşleştirme yapmak için yalnızca yürütme yolunu kullanabilir. Bu durumda normal ifade, herhangi bir yürütme yoluyla eşleşmediğinden "//" ile başlamamalıdır. Paket adları şu şekilde 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.
Bu seçenek, kullanılan derleme modundan bağımsız olarak uygulanır. Örneğin, --compilation_mode=opt
ile derleme yapmak ve bazı dosyaları seçerek daha güçlü optimizasyon etkinken veya optimizasyon devre dışıyken derlemek mümkündür.
Uyarı: Bazı dosyalar hata ayıklama sembolleri kullanılarak seçmeli olarak derlenmişse bağlantı sırasında simgeler kaldırılabilir. Bu durum, --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++ derleyicisine iletilen rastgele bir seçeneği temsil eder. Bir seçenek ,
içeriyorsa \,
gibi tırnak içine alınmalıdır. Normal ifadeleri seçeneklerden ayırmak için yalnızca ilk @
kullanılır. Bu nedenle, seçenekler de @
içerebilir.
Örnek:
--per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs
file.cc
hariç olmak üzere //foo/
içinde bulunan tüm .cc
dosyaları için C++ derleyicisinin komut satırına -O0
ve -fprofile-arcs
seçeneklerini ekler.
--dynamic_mode=mode
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üştürülür; linux içindefault
, cygwin içinoff
.default
: Bazel'in dinamik olarak bağlanıp bağlanmayacağını seçmesini sağlar. Daha fazla bilgi için linkstatic işlevine bakın.fully
: Tüm hedefleri dinamik olarak bağlar. Bu, bağlantı süresini hızlandırır ve elde edilen ikili dosyaların boyutunu azaltır.off
: Tüm hedefleri çoğunlukla statik modda bağlar. 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 yararlı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++ sertleştirme derlemeleri için 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 olarak 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ı kullanan hedefler de dahil olmak üzere (herhangi bir malloc
belirtmeden) tüm malloc="target"
özelliklerini geçersiz kılarak her zaman belirtilen Malloc uygulamasını kullanın.
--crosstool_top=label
Bu seçenek, derleme sırasında tüm C++ 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
Belirtilmemişse Bazel, derleme sırasında çalıştırılan araçlar gibi ana makine yapılandırmasında kodu derlemek için --crosstool_top
değerini kullanır. Bu işaretin asıl amacı,
çapraz derlemeyi mümkün kılmaktır.
--apple_crosstool_top=label
C/C++ kurallarını objc*, ios* ve apple* kurallarının geçişli deps
alanında derlemek için kullanılacak çapraz araç. Bu işaret, bu hedefler için --crosstool_top
değerinin üzerine yazar.
--android_crosstool_top=label
C/C++ kurallarını android_binary
kurallarının geçişli deps
içinde 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 --fat_apk_cpu
adresini de inceleyin.
--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
Bu seçenek, Android ile ilgili kuralları oluşturmak için kullanılacak Android SDK/platform araç zincirini ve Android çalışma zamanı kitaplığını belirtir.
WORKSPACE dosyasında 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
Belirtilmemişse bazel, ana makine yapılandırmasında kodu derlemek için --java_toolchain
değerini kullanır (ör. derleme sırasında çalıştırılan araçlar için). Bu işaretin asıl amacı,
çapraz derlemeyi mümkün kılmaktır.
--javabase=(label)
Bu seçenek, bazel run, bazel test ve java_binary
ile java_test
kurallarına göre derlenen Java ikili dosyaları için kullanılacak temel Java yüklemesinin etiketini belirler. JAVABASE
ve JAVA
"Marka" değişkenleri bu seçenekten türetilir.
--host_javabase=label
Bu seçenek, ana makine yapılandırmasında kullanılacak temel Java yüklemesinin etiketini ayarlar (örneğin, JavaBuilder ve Singlejar gibi ana makine derleme araçları için).
Bu işlem, Java kaynak dosyalarını derlemek için kullanılan Java derleyicisini seçmez. Derleyici, --java_toolchain
seçeneği ayarlanarak 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 etkileri 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 yerinelocal
sütunlarını kullanın.sandboxed
, komutların yerel makinedeki bir korumalı alanda yürütülmesine neden olur. Bu, tüm giriş dosyalarının, veri bağımlılıklarının ve araçlarınınsrcs
,data
vetools
özelliklerinde doğrudan bağımlılık olarak listelenmesini gerektirir. Bazel, korumalı alan yürütmeyi destekleyen sistemlerde varsayılan olarak yerel korumalı alanı etkinleştirir.local
, komutların yerel alt işlemler olarak yürütülmesine neden olur.worker
, varsa kalıcı 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 seçenek yalnızca uzaktan yürütücü ayrı olarak yapılandırılmışsa kullanılabilir.
--strategy mnemonic=strategy
Bu seçenek, komutların nerede ve nasıl yürütüleceğini kontrol ederek --spawn_strategy (ve hatırlatıcı Üretme ile --genrule_strategy) işlemini her anımsatıcı temelde geçersiz kılar. Desteklenen stratejiler ve etkileri için --spawn_strategy bölümüne bakın.
--strategy_regexp=<filter,filter,...>=<strategy>
Bu seçenek, 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şiyorsa ancak //foo/bar ile eşleşmiyorsalocal
stratejisini kullanarak işlemleri çalıştırır. - Örnek:
--strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed
, "//foo/bar/baz derleniyor" komutunusandboxed
stratejisiyle çalıştırır ancak sırayı tersine çevirereklocal
ile çalıştırır. - Örnek:
--strategy_regexp='Compiling.*/bar=local,sandboxed'
,local
stratejisiyle "//foo/bar/baz derleniyor" komutunu çalıştırır ve başarısız olursasandboxed
stratejisine geçer.
--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ında eşzamanlı olarak yürütülmesi gereken iş sayısıyla ilgili bir sınır belirtir.
--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ı algoritma anlamına gelir: İlk rapor 10 saniye sonra, 30 saniye sonra yazdırılır ve bu ilerleme durumu dakikada bir olarak raporlanır.
Bazel, --curses
tarafından belirtildiği gibi, imleç kontrolünü kullandığında ilerleme her saniyede bir 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. Bu parametreler, bir tam sayı veya bir anahtar kelimeyi (HOST_RAM veya HOST_CPUS) ve isteğe bağlı olarak [-|*
float]
değerini (ör. --local_cpu_resources=2
, --local_ram_resources=HOST_RAM*.5
, --local_cpu_resources=HOST_CPUS-1
) alır. İşaretler bağımsızdır; bunlardan biri veya ikisi de 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.
--[no]build_runfile_links
Varsayılan olarak etkin olan bu seçenek, testler ve ikili dosyalar için çalışma dosyası kısayollarının çıkış dizininde oluşturulup oluşturulmayacağını belirtir.
--nobuild_runfile_links
kullanmak, tüm hedeflerin derlenip derlenmediğini doğrulamak için çalıştırma dosyası ağaçlarını oluşturma yükü olmadan 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 "çalıştırma dosyaları" ağacı genellikle ilgili ikili dosyanın veya testin kardeşi olarak köklenir.
Test yürütme sırasında çalıştırma dosyalarına $TEST_SRCDIR/workspace/packagename/filename
formunun yolları kullanılarak 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. Özellikle her test (veya uygulama) kendi çalışma dosyası ağacını gerektirdiğinden, bazı büyük derlemelerde toplam derleme süresine önemli ölçüde katkıda bulunabilir.
--[no]build_runfile_manifests
Varsayılan olarak etkin olan bu seçenek, çalışma dosyası manifestlerinin çıkış ağacına yazılıp yazılmayacağını belirtir.
Devre dışı bırakıldığında --nobuild_runfile_links
.
Runfile ağaçları bellek içi manifestlerden uzaktan oluşturulacağı için testler uzaktan yürütülürken devre dışı bırakılabilir.
--[no]discard_analysis_cache
Bu seçenek etkinleştirildiğinde Bazel, 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. Hafıza tasarrufu modu hakkında da bilgi edinin.
--[no]keep_going
(-k)
GNU Make'te olduğu gibi, ilk hatayla karşılaşıldığında derlemenin yürütme aşaması durdurulur. Bazen hatalarla karşılaşsanız bile mümkün olduğunca fazla derleme yapmaya çalışmak faydalı olabilir. Bu seçenek bu davranışı etkinleştirir ve belirtildiğinde derleme, ön koşulları başarıyla oluşturulmuş her hedefi oluşturmaya çalışır ancak hataları yok sayar.
Bu seçenek genellikle bir derlemenin yürütme aşamasıyla ilişkili olsa da analiz aşamasını da etkiler: Derleme komutunda birkaç hedef belirtilmişse ancak bunlardan yalnızca bazıları başarıyla analiz edilebiliyorsa --keep_going
belirtilmemişse derleme bir hatayla durdurulur. Bu durumda derleme, sadece başarıyla analiz edilen hedefler için yürütme aşamasına geçer.
--[no]use_ijars
Bu seçenek, Bazel tarafından java_library
hedeflerinin derlenme şeklini değiştirir. Bazel, bağımlı java_library
hedeflerini derlemek için java_library
çıktısını kullanmak yerine yalnızca özel olmayan üyelerin (herkese açık, korumalı ve varsayılan (paket) erişim yöntemleri ve alanları) imzalarını içeren arayüz jar'ları oluşturur ve bağımlı hedefleri derlemek için bu 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 yere 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şmesine neden olur ve varsayılan olarak açıktır. Bu seçenek devre dışı bırakıldığında yürütme aşaması atlanır ve yalnızca ilk iki aşama (yükleme ve analiz) gerçekleşir.
Bu seçenek, herhangi bir şey oluşturmadan BUILD 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. Ancak, güncel olmayan dosyalar derlenmez, bunun yerine bir hata bildirilir ve derleme başarısız olur. Bu seçenek, derleme maliyeti olmadan bir derlemenin kaynak düzenlemesinden daha yakın zamanda (örneğin, gönderim öncesi kontroller için) gerçekleştirilip gerçekleştirilmediğini belirlemek için faydalı olabilir.
Ayrıca bkz. --check_tests_up_to_date
.
--[no]compile_one_dependency
Bağımsız değişken dosyalarının tek bir bağımlılığını derleyin. Bu özellik, IDE'lerde kaynak dosyaların söz dizimi kontrolünde yararlıdır. Örneğin, düzenleme/derleme/test döngüsünde hataları mümkün olduğunca erken tespit etmek için kaynak dosyaya bağlı tek bir hedefi yeniden oluşturarak söz dizimi kontrolünü yapabilirsiniz. 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. Şunun için:
C++ ve Java kaynaklarında, aynı dil alanındaki kurallar tercihen seçilir. Aynı tercihe sahip birden çok kural için BUILD dosyasında ilk görünen kural seçilir. Kaynak dosyaya referans vermeyen, açıkça adlandırılmış bir hedef kalıbı hatayla sonuçlanır.
--save_temps
--save_temps
seçeneği, derleyiciden gelen geçici çıkışların kaydedilmesine neden olur. Bunlar arasında .s dosyaları (derleyici kodu), .i (önceden işlenmiş C) ve .ii (önceden işlenmiş C++) dosyaları yer alır. Bu çıkışlar genellikle hata ayıklama için 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'in ek çıkış dosyalarının konumunu yazdırmasını sağlamak için --show_result n
ayarınızın yeterince yüksek olup olmadığını kontrol edin.
--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. Etiket filtresi oluşturma işlemi, etiket anahtar kelimelerinin virgülle ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak, hariç tutulan etiketleri belirtmek için "-" işareti eklenir. Zorunlu etiketlerin önünde "+" işareti de bulunabilir.
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 virgülle ayrılmış listesi (küçük, orta, büyük veya çok büyük) şeklinde belirtilir. İsteğe bağlı olarak, hariç tutulan test boyutlarını belirtmek için kullanılan "-" işareti eklenir. Örneğin,
% bazel test --test_size_filters=small,medium //foo:all
ve
% bazel test --test_size_filters=-large,-enormous //foo:all
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 yalnızca belirtilen zaman aşımına sahip test hedeflerini test eder (veya --build_tests_only
de belirtilmişse oluşturur). Test zaman aşımı filtresi, izin verilen test zaman aşımı değerlerinin (kısa, orta, uzun veya sonsuz) virgül ile ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak, hariç tutulan test zaman aşımlarını belirtmek için "-" 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]*
Belirtiliyse Bazel yalnızca en az bir zorunlu etikete (varsa) sahip olan ve hariç tutulan etiketi olmayan test hedeflerini test eder (veya --build_tests_only
de belirtilmişse derleyebilir). 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.
Test etiketi filtreleme varsayılan olarak uygulanmaz. Testin size
ve local
etiketlerine göre de bu şekilde filtreleme yapabileceğinizi unutmayın.
--test_lang_filters=lang[,lang]*
Resmi bir *_test
kuralı olan diller için virgülle ayrılmış bir test dili listesi belirtir (bu dillerin tam listesi için derleme ansiklopedisine bakın). Hariç tutulan dilleri belirtmek için her dilin önüne isteğe bağlı olarak "-" eklenebilir. Her dil için kullanılan ad, *_test
kuralındaki dil ön ekiyle aynı olmalıdır (ör. cc
, java
veya sh
).
Belirtilirse Bazel yalnızca belirtilen dillerin test hedeflerini test eder (veya --build_tests_only
de belirtilmişse oluşturur).
Örneğin,
% bazel test --test_lang_filters=cc,java foo/...
foo/...
'de yalnızca C/C++ ve Java testlerini (sırasıyla cc_test
ve java_test
kuralları kullanılarak tanımlanır) test ederken
% bazel test --test_lang_filters=-sh,-java foo/...
sh_test
ve java_test
testleri hariç foo/...
'teki tüm testleri çalıştırır.
Test dili filtreleme varsayılan olarak uygulanmaz.
--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 değerinin yorumu, testi çalıştırmaktan sorumlu test çerçevesine bağlıdır. Bu bir glob, alt dize veya
regexp olabilir. --test_filter
, farklı --test_arg
filtre bağımsız değiş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 nedeni 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
kullanmanın performans cezasını önemli ölçüde artırabilir.
--explain
etkinleştirilmezse --verbose_explanations
'un hiçbir etkisi olmaz.
--profile=file
Dosya adı bağımsız değişkenini alan bu seçenek, Bazel'in profil çıkarma verilerini dosyaya yazmasına neden olur. Ardından 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 mesajları yayınlamasına neden olur. Bu seçenek 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, bazelin n saniyede en fazla bir ilerleme mesajı göstermesine neden olur. Burada n gerçek bir sayıdır.n
Bu seçenek için varsayılan değer 0.02'dir.Yani bazel, ilerleme mesajlarını her 0,02 saniyede bir olacak şekilde sınırlandırır.
--show_result=n
Bu seçenek, bazel build
komutunun sonunda sonuç bilgilerinin yazdırılmasını kontrol eder. Varsayılan olarak, tek bir derleme hedefi belirtilmişse Bazel, hedefin başarıyla güncellenip güncellenmediğini belirten bir mesaj ve güncellendiyse hedefin oluşturduğu çıkış dosyalarının listesini yazdırır. Birden fazla hedef belirtilmişse sonuç bilgileri gösterilmez.
Sonuç bilgileri tek bir hedefin veya birkaç hedefin derlemeleri için yararlı olsa da büyük derlemeler (ör. üst düzey bir proje ağacının tamamı) için bu bilgiler çok fazla olabilir ve dikkat dağıtıcı olabilir. Bu seçenek, bu bilgilerin kontrol edilmesine olanak tanır. --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. Bu nedenle sıfır, sonuç bilgilerinin her zaman engellenmesine, ç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ı olurken, ikinci durumda daha az faydalıdır. Tüm seçeneklerde olduğu gibi bu, .bazelrc
dosyası aracılığıyla örtülü olarak belirtilebilir.
Dosyalar, derlenmiş yürütülebilir dosyaları çalıştırmak için dosya adını kabuğa kopyalayıp yapıştırmayı kolaylaştıracak şekilde yazdırılır. Her hedef için "güncel" veya "başarısız" mesajları, derlemeyi yöneten komut dosyaları tarafından kolayca ayrıştırılabilir.
--sandbox_debug
Bu seçenek, işlem yürütme için korumalı alanı kullanırken Bazel'in ekstra hata ayıklama bilgileri yazdırmasına neden olur. Bu seçenek, yürütülme sırasında işlemler tarafından görülebilen dosyaların incelenebilmesi için korumalı alan dizinlerini de korur.
--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!)
Ancak bazı komutlar (ör. sembolik bağlantı ağaçları oluşturma) Bazel'de dahili olarak uygulanır. Bunlar için görüntülenecek komut satırı yoktur.
--subcommands=pretty_print
, komutun bağımsız değişkenlerini tek bir satır yerine liste olarak yazdırmak için iletilebilir. Bu, uzun komut satırlarının daha okunaklı hale getirilmesine yardımcı olabilir.
Aşağıdaki --verbose_failures seçeneğini de inceleyin.
Alt komutları bir dosyaya araç dostu bir biçimde kaydetmek için --execution_log_json_file ve --execution_log_binary_file seçeneklerine bakın.
--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 tarafından oluşturulan ikili programları "damgalamak" için şu seçenekleri kullanın: İkili programlara kaynak denetimi düzeltmesi veya çalışma alanıyla ilgili diğer bilgiler gibi ek bilgiler yerleştirin. Bu mekanizmayı stamp
özelliğini destekleyen kurallarla (ör. genrule
, cc_binary
) kullanabilirsiniz.
--workspace_status_command=program
Bu işaret, Bazel'in her derlemeden önce çalıştıracağı bir ikili program belirtmenize olanak tanır. Program, mevcut kaynak denetimi düzeltmesi gibi çalışma alanının durumuyla ilgili bilgileri bildirebilir.
İşaretin değeri, yerel programa giden bir yol olmalıdır. Linux/macOS'te bu, 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ş olmalı, ardından sıfır ile çıkmalı (aksi takdirde derleme başarısız olur). Anahtar adları herhangi bir şey olabilir ancak yalnızca büyük harf ve alt çizgi kullanılabilir. 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 ya da değer birden çok satıra yayılamaz. Anahtarlar yinelenmemelidir.
Bazel, anahtarları iki pakete ayırır: "kararlı" ve "değişken". ("İstikrarlı" ve "değişken" adları biraz mantıksızdır, bu yüzden bunlar hakkında fazla düşünmeyin.)
Daha sonra Bazel, anahtar/değer çiftlerini iki dosyaya yazar:
bazel-out/stable-status.txt
, anahtar adınınSTABLE_
ile başladığı tüm anahtarları ve değerleri içerirbazel-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, damgalanmış işlemleri yeniden çalıştırır. Bu nedenle, kararlı durum zaman damgaları gibi öğeler içermemelidir. Çünkü bunlar her zaman değişir ve Bazel'in her derlemede damgalanmış işlemleri yeniden çalıştırmasına neden olur.Bazel her zaman aşağıdaki sabit anahtarları verir:
BUILD_EMBED_LABEL
:--embed_label
değerinin değeriBUILD_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 her zaman değişmesini bekler ve
bazel-out/volatile-status.txt
dosyasını gerektiği gibi 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ü)
Linux/macOS'te true
hiçbir şey yapmadığı, başarılı bir şekilde (sıfırla çıkar) sona erdiği ve hiçbir çıkış yazdırmadığı için --workspace_status_command=/bin/true
ile Workspace durumunun alınmasını devre dışı bırakabilirsiniz. Windows'ta aynı etkiyi elde etmek 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 dosyalar içine yerleştirilip yerleştirilmeyeceğini kontrol eder.
Damgalama, stamp
özelliği kullanılarak kural bazında açıkça etkinleştirilebilir veya devre dışı bırakılabilir. Ayrıntılı bilgi için lütfen Build Ansiklopedi'yi inceleyin. Bir kural stamp = -1
değerini (*_binary
kuralları için varsayılan değer) ayarlarsa bu seçenek, damga basma özelliğinin etkin olup olmayacağını belirler.
Bu seçenekten veya stamp
özelliğinden bağımsız olarak Bazel, ana makine yapılandırması için oluşturulan ikili programları hiçbir zaman damgalamaz. stamp =
0
değerini (*_test
kuralları için varsayılan) ayarlayan kurallar için damgalama, --[no]stamp
özelliğinden bağımsız olarak devre dışı bırakılır. --stamp
belirtilmesi, bağımlılıkları değişmediği takdirde hedefleri yeniden oluşturulmaya zorlamaz.
--nostamp
ayarlanması, giriş 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 nasıl çalıştığını yapılandıran ana makine ve hedef platformları kontrol etmek ve Bazel kurallarının hangi yürütme platformlarını ve araç zincirlerini kullanabileceğini kontrol etmek için bu seçenekleri kullanın.
Platformlar ve Araçlar hakkında daha fazla bilgi edinin.
--platforms=labels
Geçerli komutun hedef platformlarını açıklayan platform kurallarının etiketleri.
--host_platform=label
Ana makine sistemini açıklayan platform kuralının etiketi.
--extra_execution_platforms=labels
İşlemleri çalıştırmak için yürütme platformları olarak kullanılabilen platformlar. Platformlar, tam hedefe göre veya bir hedef kalıbı olarak belirtilebilir. Bu platformlar, WORKSPACE dosyasında register_execution_platforms() tarafından belirtilenlerden önce değerlendirilir.
--extra_toolchains=labels
Araç zinciri çözümü sırasında dikkate alınacak araç zinciri kuralları. Araç zincirleri, tam hedefe göre veya hedef kalıbı olarak belirtilebilir. Bu araç zincirleri, register_toolchains() tarafından WORKSPACE dosyasında tanımlananlardan önce dikkate alınır.
--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.
--symlink_prefix=string
Oluşturulan kolaylık simge bağlantılarının ön ekini değiştirir. Sembolik bağlantı ön ekinin varsayılan değeri bazel-
'tir. Bu değer, bazel-bin
, bazel-testlogs
ve bazel-genfiles
sembolik bağlantılarını 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. Bir derlemenin sonunda bilgi mesajlarında yazdırılan yollar, yalnızca sembolik bağlantılar beklenen konumu işaret ediyorsa sembole bağlı kısa biçimi kullanır. Başka bir deyişle, oluşturulan sembolik bağlantılara güvenemeseniz bile bu yolların doğruluğuna güvenebilirsiniz.
Bu seçeneğin yaygın olarak kullanılan bazı değerleri:
Sembol bağlantısı oluşturmayı engelle:
--symlink_prefix=/
, Bazel'inbazel-out
vebazel-<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.Dağınıklıktan kurtulun:
--symlink_prefix=.bazel/
, Bazel'in gizli bir dizin.bazel
içindebin
(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çenek farklı değerlere ayarlandığında dosyalar farklı dizinlere yerleştirilir. Örneğin, aksi takdirde birbirlerinin çıkış dosyalarını bozan derlemeler için önbellek isabet oranlarını iyileştirmek veya karşılaştırma için çıkış dosyalarını saklamak amacıyla.
--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.
--[no]use_action_cache
Bu seçenek varsayılan olarak etkindir. Devre dışı bırakılırsa Bazel yerel işlem önbelleğini kullanmaz. Yerel işlem önbelleğini devre dışı bırakmak, temiz derlemeler için bellek ve disk alanı tasarrufu sağlar ancak artımlı derlemeleri yavaşlatır.
--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üklemeyi ve analizi yavaşlatan Starlark işlevlerini tespit etmek için bu seçeneği kullanın. Örneğin:
$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/... $ pprof /tmp/pprof.gz (pprof) top Type: CPU Time: Feb 6, 2020 at 12:06pm (PST) Duration: 5.26s, Total samples = 3.34s (63.55%) Showing nodes accounting for 3.34s, 100% of 3.34s total flat flat% sum% cum cum% 1.86s 55.69% 55.69% 1.86s 55.69% sort_source_files 1.02s 30.54% 86.23% 1.02s 30.54% expand_all_combinations 0.44s 13.17% 99.40% 0.44s 13.17% range 0.02s 0.6% 100% 3.34s 100% sorted 0 0% 100% 1.38s 41.32% my/project/main/BUILD 0 0% 100% 1.96s 58.68% my/project/library.bzl 0 0% 100% 3.34s 100% main
Aynı verilerin farklı görünümleri için 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 ikili programları üretime dağıtmak için hazırlanırken kullanılır. Bu bölümde, Bazel'i kullanan sürüm mühendislerine yönelik ipuçlarının bir listesi yer almaktadır.
Önemli seçenekler
Bazel, sürüm derlemeleri için kullanıldığında derleme yapan diğer komut dosyalarında olduğu gibi 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 önemle tavsiye edilir:
Aşağıdaki 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.) sembol bağlantılarını farklılaştı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, aynı anda derleme ve test etkinliği gerçekleştirir. Belirtilen tüm hedefleri (komut satırında belirtilen test dışı hedefler dahil) derler ve önkoşulları derlenir derlenmez *_test
ve test_suite
hedeflerini test eder. Yani test yürütme, derleme işlemiyle birlikte gerçekleşir. Bu işlem genellikle önemli hız kazanımları sağlar.
bazel test
için seçenekler
--cache_test_results=(yes|no|auto)
(-t
)
Bu seçenek "auto" (varsayılan) değerine ayarlanırsa Bazel yalnızca aşağıdaki koşullardan herhangi birinin geçerli olması durumunda testi yeniden çalıştırır:
- Bazel, testteki veya bağımlılıklarındaki değişiklikleri tespit eder
- Test
external
olarak işaretlenir. --runs_per_test
ile birden fazla test çalıştırması istendi- test başarısız oldu.
"Hayır" ise tüm testler koşulsuz olarak yürütülür.
"Evet" ise önbelleğe alma davranışı, test hatalarını ve --runs_per_test
ile test çalıştırma işlemlerini önbelleğe alabilmesi dışında otomatik ile aynı olur.
Bu seçeneği .bazelrc
dosyalarında varsayılan olarak etkinleştiren kullanıcılar, belirli bir çalıştırmada varsayılan ayarı geçersiz kılmak için -t
(açık) veya -t-
(kapalı) kısaltmalarını kullanabilir.
--check_tests_up_to_date
Bu seçenek, Bazel'e testleri çalıştırmasını değil, yalnızca önbelleğe alınmış test sonuçlarını kontrol edip raporlamasını 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ı, kesintisiz olacak şekilde ayarlanmalıdır. Ancak çok fazla zaman aşımı olan 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 tamamlanana 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, herhangi bir nedenle başarısız olursa bir testin maksimum kaç kez denenebileceğini belirtir. Başlangıçta başarısız olan ancak sonunda başarılı olan bir test, test özetinde FLAKY
olarak raporlanır. Bununla birlikte, Bazel çıkış kodu veya başarılı testlerin toplam sayısı söz konusu olduğunda başarılı 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 çalıştırmaları ayrı testler olarak değerlendirilir (yedek işlev her biri için ayrı ayrı uygulanır).
Başarısız çalıştırmaları olan bir hedefin durumu, --runs_per_test_detects_flakes
işaretinin değerine bağlıdır:
- Yoksa başarısız çalıştırmalardan biri, testin tamamının başarısız olmasına neden olur.
- Bu özellik mevcutsa ve aynı parçadan iki çalıştırma PASS ve FAIL döndürürse test, kararsız durumu alır (başka başarısız çalıştırmalar testin başarısız olmasına neden olmazsa).
Tek bir sayı belirtilirse tüm testler bu sayıda çalıştırılır.
Alternatif olarak, regex@number söz dizimi kullanılarak normal ifade de belirtilebilir. Bu, --runs_per_test
'ün normal ifadeyle eşleşen hedefler üzerindeki etkisini kısıtlar (--runs_per_test=^//pizza:.*@4
, tüm testleri //pizza/
altında 4 kez çalıştırır).
Bu --runs_per_test
biçimi birden çok 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. Tek bir parça için bir veya daha fazla çalıştırma başarısız olursa ve aynı parça için bir veya daha fazla çalıştırma başarılı olursa hedef, işaretle birlikte kararsız 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
, her testin sonuçlarını ve test başarısız olursa test çıktısını içeren dosyanın adını 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 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 ö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 gelen birleştirilmiş stdout/stderr çıkışını yalnızca test tamamlandıktan hemen sonra stdout'a gönderir. Böylece, eşzamanlı testlerden gelen test çıkışlarının birbirine karışması önlenir. Derlemede, yukarıdaki özet çıkışına göre bir özet yazdırır.all
,errors
işlevine benzer ancak başarılı olanlar da dahil tüm testler için çıktıyı yazdırır.streamed
, her testin stdout/stderr çıkışını gerçek zamanlı olarak 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 bağlantı beklemesine neden olur. Bu seçenek --test_output=streamed
anlamına gelir.
--[no]verbose_test_summary
Bu seçenek varsayılan olarak etkindir. 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 çalıştırılan 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ı kategorilerinin boyutlarından farklı olduğunu açıkça belirten testler, zaman aşımının boyut etiketi tarafından dolaylı olarak ayarlandığını kabul ederek aynı değeri alır. Dolayısıyla, "uzun" bir zaman aşımı belirten "küçük" boyutlu bir test, açık bir zaman aşımı olmayan "büyük" testlerin sahip olduğu etkili zaman aşımına sahip olur.
--test_arg=arg
Komut satırı seçeneklerini/işaretlerini/bağımsız değişkenlerini her test işlemine iletir. 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.
Ortam, System.getenv("var")
(Java), getenv("var")
(C veya C++),
--run_under=command-prefix
Bu, test çalıştırıcısının test komutunu çalıştırmadan önce komutun önüne ekleyeceği bir ö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.
Bazı noktalara dikkat edilmelidir:
- Testleri çalıştırmak için kullanılan PATH, ortamınızdaki PATH değerinden farklı olabilir. Bu nedenle,
--run_under
komutu (command-prefix içindeki ilk kelime) için mutlak yol kullanmanız gerekebilir. stdin
bağlı olmadığından--run_under
etkileşimli komutlar için kullanılamaz.
Örnekler:
--run_under=/usr/bin/strace --run_under='/usr/bin/strace -c' --run_under=/usr/bin/valgrind --run_under='/usr/bin/valgrind --quiet --num-callers=20'
Test seçimi
Çıkış seçimi seçenekleri bölümünde belirtildiği gibi, testleri boyuta, zaman aşımına, etikete veya dile göre filtreleyebilirsiniz. Kullanışlı bir genel ad filtresi, belirli filtre bağımsız değişkenlerini test çalıştırıcısına iletebilir.
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 hedefi oluşturmak 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 program bir test olduğunda, mevcut çalışma dizini exec kökü olur ve genellikle ortam testlerini çoğaltmak için iyi niyetli bir girişimde bulunulur. 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).
İkili dosya, aşağıdaki ek ortam değişkenlerini de kullanabilir:
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, komut satırındaki dosya adlarını kullanıcı dostu bir şekilde yorumlamak için bu işlevler kullanılabilir.
bazel run
için seçenekler
--run_under=command-prefix
Bu, bazel test
için --run_under
seçeneğiyle aynı etkiye sahiptir (yukarıya bakın). Bununla birlikte, bazel test
tarafından çalıştırılan testler yerine bazel
run
tarafından çalıştırılan komut için geçerlidir ve etiket altında çalıştırılamaz.
Bazel'den günlük kaydı çıkışlarını filtreleme
Bazel, bazel run
ile bir ikili program çağırırken Bazel'in kendisinden ve çağrılan ikili programdan günlük kaydı çıkışını yazdırır. Günlükleri daha az karmaşık hale getirmek için --ui_event_filters
ve --noshow_progress
işaretlerini kullanarak Bazel'in kendisinden çıkışları engelleyebilirsiniz.
Örneğin:
bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp
Testleri yürütme
bazel run
, test 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. Bu şekilde bir test çalıştırırken --test_*
bağımsız değişkenlerinin hiçbirinin --test_arg
dışında bir etkisi olmadığını unutmayın .
Derleme çıkışlarını temizleme
clean
komutu
Bazel'de, Make'e 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 Bazel örneğinin tek bir çalışma alanıyla ilişkili olduğunu unutmayın. Bu nedenle, clean
komutu, söz konusu çalışma alanındaki söz konusu Bazel örneğiyle yaptığınız tüm derlemelerdeki tüm çıkışları siler.
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, temizleme işleminden sonra Bazel sunucusunu durdurur. Bu, shutdown
komutuna eşdeğerdir. Örneğin, bir Bazel örneğinin tüm disk ve bellek izlerini temizlemek için şunları belirtebilirsiniz:
% bazel clean --expunge
Alternatif olarak, --expunge_async
simgesini kullanarak arka planda silme işlemi yapabilirsiniz. Eşzamansız silme işlemi çalışmaya devam ederken Bazel komutunu aynı istemcide ç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'ın artımlı yeniden oluşturmaları mükemmel olmayabilir. Bu nedenle, sorun ortaya çıktığında tutarlı 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 hata raporu gönderin ve clean
yerine araçları kullanarak 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 komutla kullanılır: sorgu ve cquery. Bu iki komut arasındaki en büyük fark, query'nin yükleme aşamasından sonra, cquery'nin ise analiz aşamasından sonra çalıştırılmasıdır. Bu araçlar, birçok yazılım mühendisliği görevinde 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 hata oluştuğunda ilerlemeye devam etmesine neden olur. Hata durumunda eksik bir sonuç kabul edilemiyorsa 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, sorgu üzerinde çalıştığı bağımlılık grafiğine gizli bağımlılıkların dahil edilmesine neden olur. Örtük bağımlılık, BUILD dosyasında açıkça belirtilmeyen ancak bazel tarafından eklenen bir bağımlılıktır.
Örnek: "PEBL ağacındaki tüm testleri derlemek için gereken tüm genrules 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ğinizde işlemler için sorgu göndermenize olanak tanır.
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. Makine tarafından okunabilir biçim için proto
veya textproto
kullanın.
aquery komutunun normal bir Bazel derlemesinin üzerinde çalıştığı ve derleme sırasında kullanılabilen seçenek grubunu devraldığı özellikle belirtilmelidir.
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 sağlar. 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 bir seçeneğin türü, varsayılan değeri ve tam açıklaması da yazdırılır.
shutdown
Bazı sunucu işlemleri shutdown
komutu kullanılarak durdurulabilir. Bu komut, Bazel sunucusunun boş kalması (örneğin, herhangi bir derlemenin veya devam etmekte olan diğer komutların tamamlanmasından sonra) hemen sonra çıkmasını sağlar. Daha fazla bilgi için İstemci/sunucu uygulaması başlıklı makaleyi inceleyin.
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. Bu ayar belirtilirse kapatma işlemi, önceden tüketilen bellek miktarına bağlı olur. 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şkili çeşitli değerleri yazdırır.
(Bu değerler, derlemeyi yöneten komut dosyaları tarafından kullanılabilir.)
info
komutu, aşağıdaki listedeki anahtarlardan birinin adı olan tek bir (isteğe bağlı) bağımsız değişkene de izin verir.
Bu durumda, bazel info key
yalnızca 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ğinin sürüm etiketi veya yayınlanmış bir ikili dosya 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 gereken 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 edenbazel-<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 edenbazel-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üğü dosyasının mutlak yoludur. En son Bazel komutunun iç içe yerleştirilmiş stdout ve stderr akışlarını içerir.bazel info
çalıştırıldığında en son Bazel komutu olduğu için bu dosyanın içeriğinin üzerine yazılacağını unutmayın. Ancak--output_base
veya--output_user_root
seçeneklerinin ayarını değiştirmediğiniz sürece komut günlüğü dosyasının konumu değişmez.used-heap-size
,committed-heap-size
,max-heap-size
: Çeşitli JVM yığın boyutu parametrelerini raporlar. Sırasıyla: şu anda kullanılan bellek, JVM'nin sistemden kullanabileceği garanti edilen bellek, mümkün olan maksimum ayırma.gc-count
,gc-time
: Bu Bazel sunucusunun başlangıcından bu yana toplanan atık toplama sayısı ve bu işlemleri gerçekleştirmek için harcanan süre. Bu değerlerin her derlemenin başında sıfırlanmadığını unutmayın.package_path
: Bazel tarafından paketler için aranacak yolların iki nokta işaretiyle ayrılmış listesi.--package_path
derleme komut satırı bağımsız değişkeniyle aynı biçime sahiptir.
Örnek: Bazel sunucusunun işlem kimliği.
% bazel info server_pid 1285
Yapılandırmaya özgü veriler
Bu veriler, bazel info
'e 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çeneklerden bazılarının derlemenin çıkış dizininin konumunu, derleyici seçimini vb. belirlemesidir.
bazel-bin
,bazel-testlogs
,bazel-genfiles
: Derleme tarafından oluşturulan programların bulunduğubazel-*
dizinlerinin mutlak yolunu bildirir. Bu, her zaman olmasa da genellikle başarılı bir derleme sonrasında ana Workspace dizininde oluşturulanbazel-*
sembolik bağlantılarıyla aynıdır. Ancak, çalışma alanı dizini salt okunursabazel-*
sembolik bağlantısı oluşturulamaz. Simge bağlantısının varlığını varsaymak yerinebazel info
tarafından bildirilen değeri kullanan komut dosyaları daha sağlamdır.- Tamamlanmış "Make" ortamı.
--show_make_env
işareti belirtilirse mevcut yapılandırmanın "Make" ortamındaki tüm değişkenler de (CC
,GLIBC_VERSION
vb.) gösterilir. Bunlar, BUILD dosyalarında$(CC)
veyavarref("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şkenidir. Bu nedenle --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 bile (ör. salt okunur bir dizinden derliyorsanız) bu değerin doğru olduğu 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
version komutu, derlenen Bazel ikilisiyle ilgili sürüm ayrıntılarını (derlendiği değişiklik listesi ve tarih dahil) yazdırır. Bu bilgiler özellikle en son Bazel sürümüne sahip olup olmadığınızı belirlemek veya hata bildirmek için yararlıdır. İlginç değerlerden bazıları şunlardır:
changelist
: Bazel'in 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 bir bağımsız değişken olmadan bazel --version
, Bazel sunucusunun başlatılması veya sunucu arşivinin paketinin açılması gibi yan etkileri olmadığı sürece bazel version --gnu_format
ile aynı çıkışı yayınlar. bazel --version
herhangi bir yerden çalıştırılabilir. Çalışma alanı dizini gerektirmez.
mobile-install
mobile-install
komutu, uygulamaları mobil cihazlara yükler.
Şu anda yalnızca ART çalıştıran Android cihazlar desteklenmektedir.
Daha fazla bilgi için bazel mobile-install komutuna bakın.
Aşağıdaki seçenekler desteklenir:
--incremental
Politika ayarlanırsa Bazel uygulamayı aşamalı olarak, yani 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 ruhuna aykırı olarak ve Android platformunun sınırlamaları nedeniyle, bu komutun ne zaman yeterli olduğunu ve ne zaman tam yükleme gerektiğini bilmek kullanıcı 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'ların 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üklemeden sonra uygulamayı temiz bir durumda başlatmadan önce hata ayıklayıcının eklenmesini bekler.
--start=DEBUG
etiketine eş değer.
--start=_start_type_
Uygulamanın yüklendikten sonra nasıl başlatılacağı. Desteklenen _start_type_ öğeleri şunlardır:
NO
Uygulamayı başlatmaz. Bu varsayılan ayardır.COLD
Uygulamayı yükleme işleminden sonra temiz bir durumda 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ı belirtir.
Varsayılan olarak, --android_sdk
tarafından belirtilen Android SDK'sında adb kullanılır.
--adb_arg=serial
adb
için ek 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ünü seçmek için:
% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef
adb
öğesini şu şekilde çağırır:
adb -s deadbeef install ...
--incremental_install_verbosity=number
Artımlı yükleme için ayrıntı düzeyi. Hata ayıklama günlük kaydının konsola yazdırılması için bu değeri 1 olarak ayarlayın.
dump
dump
komutu, Bazel sunucusunun dahili durumunun 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 durumu dökmek için seçeneklerden en az biri belirtilmelidir.
Aşağıdaki seçenekler desteklenir:
--action_cache
, işlem önbelleği içeriğini döküyor.--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 izlemeyi gerektirir. Bu özelliği etkinleştirmek için Bazel'e başlangıç işaretleri 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 komut için bu seçenekleri Bazel'e 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, derleme sırasında önceden toplanan verileri --profile
seçeneğini kullanarak analiz eder. Derleme yürütme işlemini analiz etme veya verileri belirtilen biçimde dışa aktarma için çeşitli seçenekler sunar.
Aşağıdaki seçenekler desteklenir:
--dump
, toplanan tüm verileri kullanıcı tarafından okunabilir bir biçimde gösterir. Ancak bu özellik henüz diğer biçimleri desteklemiyor.
Biçim ayrıntıları ve kullanım yardımı için Profil oluşturarak performans sorunlarını giderme başlıklı makaleyi inceleyin.
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 standarttır. Örneğin, aynı etkiye sahip iki seçenek listesi aynı yeni listeyle standartlaştırılır.
--for_command
seçeneği, farklı komutlar arasında seçim yapmak için kullanılabilir. Şu anda yalnızca build
ve test
desteklenmektedir. Verilen komutun desteklemediği seçenekler hataya neden olur.
Örneğin:
% 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. Çalışan bir Bazel sunucusu varsa ve başlangıç seçenekleri eşleşmiyorsa 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 için bir yol bağımsız değişkeni gerekir. Bu bağımsız değişken, yazılabilir bir dizin belirtmelidir. 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 eşzamanlı olarak çalışır (&
kabuk operatörü nedeniyle) ve her biri farklı bir Bazel sunucusu örneği kullanır (farklı çıkış tabanları nedeniyle).
Buna karşılık, her iki komutta da varsayılan çıkış tabanı kullanılmışsa her iki istek de aynı sunucuya gönderilir. Bu sunucu, istekleri sırayla işler: Önce //foo
, ardından //bar
'un artımlı derlemesi oluşturulur.
--output_user_root=dir
Çıktı ve yükleme temellerinin oluşturulduğu kök dizini gösterir. 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. 11100 numaralı sorun giderildikten sonra buna izin verilebilir.
--output_base
seçeneği belirtilirse çıkış tabanını hesaplamak için --output_user_root
kullanımını geçersiz kılar.
Yükleme tabanı konumu, --output_user_root
ve 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 kendisinin çalıştığı Java sanal makinesini belirtir. Değer, JDK veya JRE içeren dizine giden bir yol olmalıdır. Etiket olmamalıdır. Bu seçenek, Bazel komutlarından önce görünmelidir. Örneğin:
% bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo
Bu işaret; uygulamalar, testler, araçlar gibi Bazel alt işlemleri tarafından kullanılan JVM'leri etkilemez. Bunun yerine --javabase veya --host_javabase 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 kendisinin çalıştığı Java sanal makinesine iletilecek bir başlatma seçeneği 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. Ayrıca, her biri ayrı bir JVM bağımsız değişkeni olarak yorumlanacak, boşlukla ayrılmış bir dize listesi 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 veya komut satırında çalıştırılan yürütülebilir Java programlarına JVM seçeneklerini 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. Alternatif olarak, testler için bazel test --test_arg=--jvm_flags=foo ...
seçeneğini kullanabilirsiniz.
--host_jvm_debug
Bu seçenek, Java sanal makinesinin Bazel'in ana yöntemini çağırmadan önce JDWP uyumlu bir hata ayıklayıcıdan bağlantı beklemesine neden olur. Bu, öncelikle Bazel geliştiricileri tarafından kullanılmak üzere tasarlanmıştır.
--autodetect_server_javabase
Bu seçenek, Bazel'in başlangıçta yüklü bir JDK'yı aramasına ve yerleştirilmiş JRE yoksa yüklü JRE'yi kullanmasına neden olur.
--explicit_server_javabase
, Bazel'i çalıştırmak için açık bir JRE seçmek amacıyla kullanılabilir.
--batch
Toplu mod, Bazel'in standart istemci/sunucu modunu kullanmamasına neden olur. Bunun yerine, tek bir komut için bir bazel java işlemi çalıştırır. Bu işlem, sinyal işleme, iş kontrolü ve ortam değişkeni devralma ile ilgili daha tahmin edilebilir anlamlar için kullanılır ve Bazel'i bir chroot 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 sunucuya sahip bir istemcide toplu mod için Bazel çalıştırılırsa ilk olarak, komutu işlemeden önce sunucu sonlandırılır.
Bazel, toplu modda veya yukarıda açıklanan alternatiflerle daha yavaş çalışır. Bunun nedeni, diğer unsurların yanı sıra derleme dosyası önbelleğinin bellekte kalmasıdır. Dolayısıyla, sıralı toplu çağrılar arasında korunmaz. Bu nedenle, toplu modu kullanmak genellikle performansın daha az önemli olduğu durumlarda (ör. sürekli derlemeler) daha mantıklı olur.
--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 10.800 (3 saat) şeklindedir. --max_idle_secs=0
, Bazel sunucusu işleminin süresiz olarak devam etmesine neden olur.
Bu seçenek, Bazel'i çağıran komut dosyaları tarafından, 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 belirterek komut dosyası, yeni bir sunucunun başlatılmasına neden olursa bu sunucunun hemen çıkmasını sağlayabilir. Bunun yerine zaten çalışan bir sunucu varsa bu sunucu, normal süre boyunca boşta kalana kadar çalışmaya devam eder. Elbette mevcut sunucunun boş zamanlayıcısı 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, devam etmeden önce sunucu kilidini tutan diğer Bazel komutlarının tamamlanmasını bekler. Devre dışı bırakılırsa Bazel, kilidi hemen alıp devam edemezse hatayla çı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 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şimli olmayan ancak iyi değerlerini düşürmek istemeyen iş yükleri için kullanışlıdır.
"man 2 sched_setscheduler" bölümüne bakın. Bu politika, Bazel veri akışı pahasına daha iyi sistem etkileşimi sağlayabilir.
Çeşitli seçenekler
--[no]announce_rc
Bazel'in, bazelrc dosyasından okunan komut seçeneklerini başlatırken duyurup duyurmayacağını 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. Mevcut command
için, böyle bir bölüm varsa command:name
'daki seçenekleri de alır. Birden fazla yapılandırma bölümünden işaret eklemek için birden çok kez belirtilebilir. Genişlemeler diğer tanımlara referans verebilir (örneğin, genişletmeler zincirlenebilir).
--curses (yes|no|auto)
Bu seçenek, Bazel'in ekran çıkışında imleç kontrollerini kullanıp kullanmayacağını belirler. Bu sayede, daha az kaydırma gerektiren veriler elde edilir ve Bazel'den daha kompakt, okunması kolay bir çıkış akışı sağlanır. Bu, --color
ile iyi bir şekilde ç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
değerine ayarlanırsa imleç denetimlerinin kullanımı, --color=auto
ile aynı koşullar altında etkinleştirilir.
--[no]show_timestamps
Belirtilirse Basel tarafından oluşturulan her iletiye, iletinin gösterildiği zamanı belirten bir zaman damgası eklenir.