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'deki Bazel komutlarının listesini tamamlar.
Hedef söz dizimi
build
veya test
gibi bazı komutlar bir hedef listesinde çalışabilir. Bunlar, Specifying targets to build (Derlenecek hedefleri belirtme) başlıklı dokümanda açıklanan, etiketlerden daha esnek bir söz dizimi kullanır.
Seçenekler
Aşağıdaki bölümlerde, derleme sırasında kullanılabilen seçenekler açıklanmaktadır. --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 bilgiler sağlar.
Çoğu seçenek yalnızca bir kez belirtilebilir. Birden fazla kez belirtildiğinde son örnek geçerli olur. Birden çok kez belirtilebilen seçenekler, "birden çok kez kullanılabilir" metniyle birlikte çevrimiçi yardımda tanımlanır.
Paketin konumu
--package_path
UYARI: --package_path
seçeneğinin desteği sonlandırıldı. Bazel, ana depodaki paketlerin çalışma alanının kök dizininde olmasını tercih eder.
Bu seçenek, belirli bir paketin BUILD dosyasını bulmak için aranan dizinler grubunu belirtir.
Bazel, paket yolunu arayarak paketlerini bulur. Bu, iki nokta üst üste işaretiyle ayrılmış ve sıralı bir bazel dizinleri listesidir. Bu dizinlerin her biri, kısmi bir kaynak ağacının köküdür.
--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 mutlak yoldur. - Yol
%workspace%
ile başlıyorsa yol, en yakın kapsayan Bazel dizinine göre alınır. Örneğin, çalışma dizininiz/home/bob/clients/bob_client/bazel/foo
ise paket yolundaki%workspace%
dizesi/home/bob/clients/bob_client/bazel
olarak genişletilir. - Diğer her şey çalışma dizinine göre alınır.
Bu genellikle yapmak istediğiniz şey değildir ve Bazel'i bazel çalışma alanının altındaki dizinlerden kullanırsanız beklenmedik şekilde davranabilir.
Örneğin, paket yolu öğesi
.
kullanıp/home/bob/clients/bob_client/bazel/foo
dizinine cd komutuyla geçerseniz paketler/home/bob/clients/bob_client/bazel/foo
dizininden çözümlenir.
Varsayılan olmayan bir paket yolu kullanıyorsanız kolaylık sağlaması için bunu Bazel yapılandırma dosyanızda belirtin.
Bazel, paketlerin geçerli dizinde olmasını gerektirmez. Bu nedenle, gerekli tüm paketler paket yolunun başka bir yerinde bulunabiliyorsa boş bir Bazel çalışma alanından derleme yapabilirsiniz.
Örnek: Boş bir istemciden oluşturma
% mkdir -p foo/bazel % cd foo/bazel % touch MODULE.bazel % bazel build --package_path /some/other/path //foo
--deleted_packages
Bu seçenek, Bazel'in silinmiş olarak kabul etmesi gereken ve paket yolundaki herhangi bir dizinden yüklemeye çalışmaması gereken paketlerin virgülle ayrılmış bir listesini belirtir. Bu, paketleri gerçekten silmeden silme işlemini simüle etmek için kullanılabilir. Bu seçenek birden çok kez iletilebilir. Bu durumda, ayrı listeler birleştirilir.
Hata kontrolü
Bu seçenekler, Bazel'in hata kontrolünü ve/veya uyarılarını kontrol eder.
--[no]check_visibility
Bu seçenek yanlış olarak ayarlanırsa görünürlük kontrolleri uyarıya dönüştürülür. Bu seçeneğin varsayılan değeri true'dur. Bu nedenle, görünürlük kontrolü varsayılan olarak yapılır.
--output_filter=regex
--output_filter
seçeneği yalnızca normal ifadeyle eşleşen hedefler için derleme ve derleme uyarılarını gösterir. Bir hedef, verilen normal ifadeyle eşleşmezse ve yürütme işlemi 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 paketler için çıkışı gösterme. |
`--output_filter=` | Her şeyi göster. |
`--output_filter=DONT_MATCH_ANYTHING` | Hiçbir şey gösterme. |
Araç bayrakları
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şken alır. Bağımsız değişken, C, C++ veya derleyici kodunun ön işleme, derleme ve/veya birleştirme için her çağrıldığında derleyiciye iletilir. Bağlantı oluşturulurken iletilmez.
Bu seçenek birden çok kez kullanılabilir. Örneğin:
% bazel build --copt="-g0" --copt="-fpic" //foo
hata ayıklama tabloları olmadan foo
kitaplığını derleyerek konumdan bağımsız kod oluşturur.
--host_copt=cc-option
Bu seçenek, yürütme yapılandırmasında derlenen kaynak dosyalar için derleyiciye iletilecek bir bağımsız değişken alır. Bu, --copt
seçeneğine benzer ancak yalnızca exec yapılandırması için geçerlidir.
--host_conlyopt=cc-option
Bu seçenek, yürütme yapılandırmasında derlenen C kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişken alır. Bu, --conlyopt
seçeneğine benzer ancak yalnızca yürütme yapılandırması için geçerlidir.
--host_cxxopt=cc-option
Bu seçenek, exec yapılandırmasında derlenen C++ kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişken alır. Bu, --cxxopt
seçeneğine benzer ancak yalnızca exec yapılandırması için geçerlidir.
--host_linkopt=linker-option
Bu seçenek, exec yapılandırmasında derlenen kaynak dosyalar için bağlayıcıya iletilecek bir bağımsız değişken alır. Bu seçenek, --linkopt
seçeneğine benzer ancak yalnızca yürütme 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
'ya benzer ancak yalnızca C derlemesi için geçerlidir, C++ derlemesi veya bağlantısı için geçerli değildir. Bu nedenle, --conlyopt
kullanarak C'ye özgü seçenekleri (ör. -Wno-pointer-sign
) iletebilirsiniz.
--cxxopt=cc-option
Bu seçenek, C++ kaynak dosyaları derlenirken derleyiciye iletilecek bir bağımsız değişken alır.
Bu, --copt
'ya benzer ancak yalnızca C++ derlemesi için geçerlidir, C derlemesi veya bağlantısı için geçerli değildir. Bu nedenle, --cxxopt
kullanarak C++'a özgü seçenekleri (ör. -fpermissive
veya -fno-implicit-templates
) iletebilirsiniz.
Örneğin:
% bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code
--linkopt=linker-option
Bu seçenek, bağlama sırasında derleyiciye iletilecek bir bağımsız değişken alır.
Bu, --copt
'ya benzer ancak yalnızca bağlantı oluşturma için geçerlidir, derleme için geçerli değildir. Bu nedenle, yalnızca bağlantı zamanında anlamlı olan derleyici seçeneklerini (ör. -lssp
veya -Wl,--wrap,abort
) --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 bkz. cc_library.linkopts.
--strip (always|never|sometimes)
Bu seçenek, bağlayıcıyı -Wl,--strip-debug
seçeneğiyle çağırarak Bazel'ın tüm ikili dosyalardan ve paylaşılan kitaplıklardan hata ayıklama bilgilerini çıkarıp çıkarmayacağını belirler.
--strip=always
, hata ayıklama bilgilerinin her zaman kaldırılacağı anlamına gelir.
--strip=never
, hata ayıklama bilgilerinin hiçbir zaman kaldırılmaması anlamına gelir.
--strip=sometimes
varsayılan değeri, --compilation_mode
fastbuild
ise şeridi çıkar anlamına gelir.
% bazel build --strip=always //foo:bar
oluşturulan tüm ikili dosyalardan hata ayıklama bilgilerini kaldırarak hedefi derler.
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. Yalnızca hata ayıklama sembolleri değil, tüm sembolleri kaldırmak istiyorsanız ld'nin --strip-all
seçeneğini kullanmanız gerekir. Bunu, Bazel'e --linkopt=-Wl,--strip-all
ileterek yapabilirsiniz. Ayrıca, Bazel'in --strip
işaretinin ayarlanmasının --linkopt=-Wl,--strip-all
işaretini geçersiz kılacağı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 de iletebilir ve hedefinizin //foo:bar.stripped
sürümünü açıkça oluşturabilirsiniz. --stripopt
bölümünde açıklandığı gibi bu, son ikili dosya bağlandıktan sonra bir çıkarma işlemi uygular ve çıkarma işlemini derlemenin tüm bağlantı işlemlerine dahil etmez.
--stripopt=strip-option
Bu, *.stripped
ikili dosyası oluştururken strip
komutuna aktarılacak ek bir seçenektir. Varsayılan değer -S -p
'dir. Bu seçenek birden çok kez kullanılabilir.
--fdo_instrument=profile-output-dir
--fdo_instrument
seçeneği, yerleşik C/C++ ikili dosyası yürütüldüğünde FDO (geri bildirim odaklı optimizasyon) profil çıktısı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ının dizin öneki olarak kullanılır.
Profil veri ağacı oluşturulduktan sonra profil ağacı sıkıştırılmalı ve FDO optimizasyonlu derlemeyi etkinleştirmek için --fdo_optimize=profile-zip
Bazel seçeneğine sağlanmalıdır.
LLVM derleyicisi için bağımsız değişken, ham LLVM profil veri dosyalarının dökümünün yapı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 daha önce 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ıyla 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 profil çıkış dosyasına işaret etmeli ve .profdata uzantılı olmalıdır.
--fdo_instrument
ve --fdo_optimize
seçenekleri aynı anda kullanılamaz.
--java_language_version=version
Bu seçenek, Java kaynaklarının sürümünü belirtir. Örneğin:
% bazel build --java_language_version=8 java/com/example/common/foo:all
Yalnızca Java 8 spesifikasyonuyla uyumlu yapıların derlenmesine ve kullanılmasına izin verir.
Varsayılan değer 11'dir. -->
Olası değerler: 8, 9, 10, 11, 17 ve 21'dir. default_java_toolchain
kullanılarak özel Java araç zincirleri kaydedilerek bu değerler genişletilebilir.
--tool_java_language_version=version
Derleme sırasında yürütülen araçları oluşturmak için kullanılan Java dilinin sürümü. Varsayılan değer 11'dir.
--java_runtime_version=version
Bu seçenek, kodu yürütmek ve testleri çalıştırmak için kullanılacak JVM sürümünü belirtir. Örneğin:
% bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application
JDK 11'i uzak bir depodan indirir ve Java uygulamasını bu JDK'yı kullanarak çalıştırır.
Varsayılan değer local_jdk
'dır.
Olası değerler: local_jdk
, local_jdk_version
,
remotejdk_11
, remotejdk_17
ve remotejdk_21
.
local_java_repository
veya remote_java_repository
depo kurallarını kullanarak özel JVM'yi kaydederek değerleri genişletebilirsiniz.
--tool_java_runtime_version=version
Derleme sırasında gereken araçları yürütmek için kullanılan JVM sürümü.
Varsayılan değer remotejdk_11
'dır.
--jvmopt=jvm-option
Bu seçenek, seçenek bağımsız değişkenlerinin Java VM'ye aktarılmasına olanak tanır. Tek bir büyük bağımsız değişkenle veya ayrı ayrı bağımsız değişkenlerle birden çok kez kullanılabilir. Örneğin:
% bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all
tüm Java ikili dosyalarını başlatmak için sunucu VM'sini kullanır ve VM'nin başlangıç yığını boyutunu 256 MB olarak 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 ayrı ayrı 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 yeniden oluşturur.
Seçenek, javac için Bazel'in yerleşik varsayılan seçeneklerinden sonra ve kural başına seçeneklerden önce javac'a iletilir. javac'e iletilen 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 etmeyeceğini belirler. Java hedefleri, doğrudan kullanılan tüm hedefleri bağımlılık olarak açıkça bildirmelidir. Bu işaret, javac'e her bir java dosyası için tür kontrolünde gerçekten kullanılan jar'ları belirlemesini ve mevcut hedefin doğrudan bağımlılığının çıktısı olmamaları durumunda uyarı/hata vermesini bildirir.
off
, kontrolün devre dışı bırakıldığı anlamına gelir.warn
, javac'ın eksik her doğrudan bağımlılık için[strict]
türünde 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ıklar bulunursa mevcut hedefin oluşturulamamasına neden olur. Bu, işaret belirtilmediğinde de varsayılan davranıştır.
Anlam bilimi 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
olarak kısaltılır, özellikle -c opt
) fastbuild
, dbg
veya opt
bağımsız değişkenini alır ve optimizasyon seviyesi ile 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. Bu nedenle, her seferinde tam bir yeniden oluşturma işlemi yapmanız gerekmeden modlar arasında geçiş yapabilirsiniz.
fastbuild
, mümkün olduğunca hızlı derleme anlamına gelir: minimum hata ayıklama bilgisi oluşturun (-gmlt -Wl,-S
) ve optimizasyon yapmayın. Bu varsayılan seçenektir. Not:-DNDEBUG
ayarlanmaz.dbg
, hata ayıklama etkin olarak derleme (-g
) anlamına gelir. Bu sayede gdb'yi (veya başka bir hata ayıklayıcıyı) kullanabilirsiniz.opt
, optimizasyon etkinleştirilmiş veassert()
çağrıları devre dışı bırakılmış (-O2 -DNDEBUG
) şekilde oluşturma anlamına gelir.--copt -g
parametresini de iletmediğiniz süreceopt
modunda hata ayıklama bilgileri 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ğırma ortamından alınır. Alternatif olarak, değer çağırma ortamından bağımsız olarak ayarlanacak şekilde name=value
çiftiyle de belirtilebilir.
Bu --action_env
işareti birden çok kez belirtilebilir. Aynı değişkene birden fazla --action_env
işaretinde değer atanırsa en son atama geçerli olur.
--experimental_action_listener=label
experimental_action_listener
seçeneği, Bazel'e label tarafından belirtilen action_listener
kuralındaki ayrıntıları kullanarak extra_actions
öğesini derleme grafiğine eklemesini söyler.
--[no]experimental_extra_action_top_level_only
Bu seçenek true olarak 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'e extra_actions
için planlanacak hedef kümesini filtrelemesini söyler.
Bu işaret yalnızca --experimental_action_listener
işaretiyle birlikte geçerlidir.
Varsayılan olarak, oluşturulması istenen hedeflerin geçişli kapanımındaki tüm extra_actions
öğeleri yürütülmek üzere planlanır.
--experimental_extra_action_filter
, planlamayı, sahibinin etiketi belirtilen normal ifadeyle eşleşen extra_actions
ile kısıtlar.
Aşağıdaki örnek, extra_actions
planlamasını yalnızca sahibin etiketinde "/bar/" ifadesinin bulunduğu işlemlerle sınırlandırır:
% bazel build --experimental_action_listener=//test:al //foo/... \ --experimental_extra_action_filter=.*/bar/.*
--host_cpu=cpu
Bu seçenek, ana makine araçlarını oluşturmak için kullanılması gereken CPU mimarisinin adını belirtir.
--android_platforms=platform[,platform]*
Geçişli deps
oluşturulacak platformlar (özellikle C++ gibi yerel bağımlılıklar için) android_binary
kuralları. Örneğin, bir cc_library
, android_binary
kuralının geçişli deps
içinde görünüyorsa android_binary
kuralı için --android_platforms
ile belirtilen her platform için bir kez oluşturulur ve nihai çıktıya dahil edilir.
Bu işaretin varsayılan değeri yoktur: Özel bir Android platformu tanımlanmalı ve kullanılmalıdır.
.so
ile belirtilen her platform için bir .so
dosyası oluşturulur ve APK'ya paketlenir.--android_platforms
.so
dosyasının adının önüne, android_binary
kuralının adıyla birlikte "lib" eklenir. Ö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 ifadelerinden biriyle eşleşen ve hariç tutma ifadelerinden biriyle eşleşmeyen bir etikete veya yürütme yoluna sahip tüm C++ dosyaları, belirtilen seçeneklerle oluşturulur. Etiket eşleştirme, etiketin standart biçimini kullanır
(ör. //package
:label_name
).
Yürütme yolu, C++ dosyasının temel adı (uzantı dahil) ile birlikte çalışma alanı dizininize giden göreli yoldur. Platforma bağlı tüm ön ekler de buna dahildir.
Oluşturulan dosyaları (ör. genrule çıktıları) eşleştirmek için
Bazel 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 dizindeki 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ı daha güçlü optimizasyon etkinleştirilmiş veya optimizasyon devre dışı bırakılmış şekilde seçerek derlemek mümkündür.
Uyarı: Bazı dosyalar hata ayıklama simgeleriyle seçici olarak derlenirse simgeler bağlantı sırasında kaldırılabilir. Bu durum, --strip=never
ayarlanarak önlenebilir.
Söz dizimi: [+-]regex[,[+-]regex]...@option[,option]...
Burada
regex
, dahil etme kalıplarını tanımlamak için +
ile, hariç tutma kalıplarını tanımlamak için ise -
ile önek olarak kullanılabilen bir normal ifadeyi temsil eder. option
, C++ derleyicisine iletilen rastgele bir seçeneği ifade eder. Bir seçenek ,
içeriyorsa şu şekilde tırnak içine alınmalıdır:
\,
. Seçenekler @
da içerebilir. Çünkü normal ifadeleri seçeneklerden ayırmak için yalnızca ilk @
kullanılır.
Örnek:
--per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs
//foo/
içindeki tüm .cc
dosyaları için -O0
ve -fprofile-arcs
seçeneklerini file.cc
hariç C++ derleyicisinin komut satırına ekler.
--dynamic_mode=mode
C++ ikililerinin dinamik olarak bağlanıp bağlanmayacağını belirler ve derleme kurallarında linkstatic özelliği ile etkileşime girer.
Modlar:
default
: Bazel'in dinamik olarak bağlantı oluşturup oluşturmayacağını seçmesine olanak tanır. Daha fazla bilgi için linkstatic sayfasına bakın.fully
: Tüm hedefleri dinamik olarak bağlar. Bu, bağlantı süresini hızlandırır ve ortaya çıkan ikili dosyaların boyutunu küçültür.off
: Hedeflerin tümünü çoğunlukla statik modda bağlar. Bağlantı seçeneklerinde-static
ayarlanırsa hedefler tamamen statik olarak değişir.
--fission (yes|no|[dbg][,opt][,fastbuild])
Fission'ı etkinleştirir. Bu özellik, C++ hata ayıklama bilgilerini normalde gideceği .o dosyaları yerine özel .dwo dosyalarına yazar. Bu, bağlantılara yönelik giriş boyutunu önemli ölçüde azaltır ve bağlantı sürelerini kısaltabilir.
[dbg][,opt][,fastbuild]
olarak ayarlandığında (örnek:
--fission=dbg,fastbuild
), Fission yalnızca belirtilen derleme modu grubu için etkinleştirilir. Bu, bazelrc ayarları için yararlıdır. yes
olarak ayarlandığında Fission, genel olarak etkinleştirilir. no
olarak ayarlandığında Fission, genel olarak devre dışı bırakılır. Varsayılan değer no
'dır.
--force_ignore_dash_static
Bu işaret ayarlanırsa BUILD dosyalarındaki cc_*
kurallarının linkopts'indeki tüm -static
seçenekleri yoksayılır. Bu yalnızca C++ güvenlik açığı kapatma derlemeleri için geçici çözüm olarak tasarlanmıştır.
--[no]force_pic
Etkinleştirilirse tüm C++ derlemeleri konumdan bağımsız kod ("-fPIC") oluşturur, bağlantılar PIC önceden oluşturulmuş kitaplıkları PIC olmayan kitaplıklara tercih eder ve bağlantılar konumdan bağımsız yürütülebilir dosyalar ("-pie") oluşturur. 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 ayarlar. Daha fazla bilgi için ilgili kuralın belgelerine bakın. Varsayılan olarak devre dışıdır.
--custom_malloc=malloc-library-target
Belirtildiğinde, varsayılanı kullanan hedefler de dahil olmak üzere (herhangi bir malloc
belirtmeyerek) tüm malloc="target"
özelliklerini geçersiz kılarak her zaman verilen 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
Belirtilmezse Bazel, derleme sırasında çalıştırılan araçlar gibi yürütme yapılandırmasındaki kodu derlemek için --crosstool_top
değerini kullanır. Bu işaretin temel amacı, çapraz derlemeyi etkinleştirmektir.
--apple_crosstool_top=label
objc*, ios* ve apple* kurallarının geçişli deps
bölümünde C/C++ kurallarını derlemek için kullanılacak çapraz araç. Bu hedefler için bu işaret, --crosstool_top
değerinin üzerine yazar.
--compiler=version
Bu seçenek, derleme sırasında ikili dosyaların derlenmesi için kullanılacak C/C++ derleyici sürümünü (ör. gcc-4.1.0
) belirtir. Özel bir çapraz araçla derleme yapmak istiyorsanız bu işareti belirtmek yerine bir CROSSTOOL dosyası kullanmanız gerekir.
--android_sdk=label
Kullanımdan kaldırıldı. Bu doğrudan belirtilmemelidir.
Bu seçenek, Android ile ilgili tüm 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ımlanmışsa Android SDK otomatik olarak seçilir.
--java_toolchain=label
İşlem yok. Yalnızca geriye dönük uyumluluk için tutulur.
--host_java_toolchain=label
İşlem yok. Yalnızca geriye dönük uyumluluk için tutulur.
--javabase=(label)
İşlem yok. Yalnızca geriye dönük uyumluluk için tutulur.
--host_javabase=label
İşlem yok. Yalnızca geriye dönük uyumluluk için tutulur.
Yürütme stratejisi
Bu seçenekler, Bazel'in derlemeyi nasıl yürüteceğini etkiler. Derleme tarafından oluşturulan çıkış dosyaları üzerinde önemli bir etkileri olmamalıdır. Genellikle asıl etkileri derleme hızı üzerindedir.
--spawn_strategy=strategy
Bu seçenek, komutların nerede ve nasıl yürütüleceğini kontrol eder.
standalone
, komutların yerel alt işlemler olarak yürütülmesine neden olur. Bu değerin desteği sonlandırılmıştır. Lütfen bunun yerinelocal
sütunlarını kullanın.sandboxed
, komutların yerel makinede bir sanal alan içinde yürütülmesine neden olur. Bunun için tüm giriş dosyalarının, veri bağımlılıklarının ve araçlarınsrcs
,data
vetools
özelliklerinde doğrudan bağımlılık olarak listelenmesi gerekir. Bazel, varsayılan olarak, korumalı alan yürütmeyi destekleyen sistemlerde yerel korumalı alan oluşturmayı etkinleştirir.local
, komutların yerel alt işlemler olarak yürütülmesine neden olur.worker
, komutların varsa kalıcı bir çalışan kullanılarak yürütülmesine neden olur.docker
, komutların yerel makinede bir Docker sanal 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 eder. --spawn_strategy (ve --genrule_strategy ile anımsatıcı Genrule) seçeneğini anımsatıcı bazında geçersiz kılar. Desteklenen stratejiler ve etkileri için --spawn_strategy seçeneğine bakın.
--strategy_regexp=<filter,filter,...>=<strategy>
Bu seçenek, belirli bir regex_filter
ile eşleşen açıklamaları olan komutları yürütmek için hangi stratejinin kullanılması gerektiğini belirtir. Normal ifade filtresi eşleşmesi hakkında ayrıntılı bilgi için
--per_file_copt konusuna bakın. Desteklenen stratejiler ve etkileri için --spawn_strategy seçeneğine bakın.
Açıklamayla eşleşen son regex_filter
kullanılır. Bu seçenek, stratejiyi belirtmeye yönelik diğer işaretleri geçersiz kılar.
- Örnek:
--strategy_regexp=//foo.*\\.cc,-//foo/bar=local
, açıklamaları //foo.*.cc ile eşleşen ancak //foo/bar ile eşleşmeyen işlemlerinlocal
stratejisi kullanılarak çalıştırılması anlamına gelir. - Örnek:
--strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed
Sıra tersine çevrilmedensandboxed
stratejisiyle "Compiling //foo/bar/baz" çalıştırılırken sıra tersine çevrildiğindelocal
stratejisiyle çalıştırılır. - Örnek:
--strategy_regexp='Compiling.*/bar=local,sandboxed'
,local
stratejisiyle "Compiling //foo/bar/baz"ı çalıştırır ve başarısız olursasandboxed
'a geri döner.
--genrule_strategy=strategy
Bu, --strategy=Genrule=strategy
için kullanımdan kaldırılmış bir kısaltmadır.
--jobs=n
(-j)
Tam sayı bağımsız değişkeni alan bu seçenek, derlemenin yürütme aşamasında eşzamanlı olarak yürütülecek 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 olarak düzenli aralıklarla ilerleme raporu yazdırır. Bu seçenek, raporlama sıklığını ayarlar. İlerleme durumu n
saniyede bir yazdırılır.
Varsayılan değer 0'dır. Bu, artımlı bir algoritma anlamına gelir: İlk rapor 10 saniye sonra, ardından 30 saniye sonra yazdırılır ve bundan sonra ilerleme durumu dakikada bir bildirilir.
Bazel, --curses
tarafından belirtildiği gibi imleç kontrolünü kullandığında ilerleme durumu her saniyede bir bildirilir.
--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 kaynakların (MB cinsinden RAM ve CPU mantıksal çekirdeklerinin sayısı) miktarını belirtir. Bu parametreler, isteğe bağlı olarak [-|*
float]
ile birlikte bir tam sayı veya anahtar kelime (HOST_RAM ya da HOST_CPUS) alır (ör. --local_cpu_resources=2
, --local_ram_resources=HOST_RAM*.5
, --local_cpu_resources=HOST_CPUS-1
). İşaretler birbirinden bağımsızdır. Biri veya her ikisi de ayarlanabilir. Bazel, varsayılan olarak RAM miktarını ve CPU çekirdeklerinin sayısını doğrudan yerel sistemin yapılandırmasından tahmin eder.
--[no]build_runfile_links
Varsayılan olarak etkinleştirilen bu seçenek, testler ve ikililer için çalıştırılabilir dosyalar sembolik bağlantılarının çıkış dizininde oluşturulup oluşturulmayacağını belirtir.
--nobuild_runfile_links
kullanmak, tüm hedeflerin derlenip derlenmediğini çalıştırma dosyası ağaçlarını oluşturma ek yükü olmadan doğrulamak için yararlı olabilir.
Testler (veya uygulamalar) yürütüldüğünde, çalışma zamanı verisi bağımlılıkları tek bir yerde toplanır. Bazel'in çıkış ağacında bu "runfiles" ağacı genellikle ilgili ikili veya testin kardeşi olarak köklendirilir.
Test yürütme sırasında, runfile'lara $TEST_SRCDIR/canonical_repo_name/packagename/filename
biçimindeki yollar kullanılarak erişilebilir.
Runfiles ağacı, testlerin, üzerinde bağımlılık beyan ettikleri tüm dosyalara erişebilmesini ve başka hiçbir dosyaya erişememesini sağlar. Varsayılan olarak, runfiles ağacı, gerekli dosyalara sembolik bağlantılar kümesi oluşturularak uygulanır. Bağlantı kümesi büyüdükçe bu işlemin maliyeti de artar ve bazı büyük derlemelerde, özellikle her bir testin (veya uygulamanın) kendi runfiles ağacını gerektirmesi nedeniyle genel derleme süresine önemli ölçüde katkıda bulunabilir.
--[no]build_runfile_manifests
Varsayılan olarak etkinleştirilen bu seçenek, runfiles manifestlerinin çıkış ağacına yazılıp yazılmayacağını belirtir.
Devre dışı bırakmak --nobuild_runfile_links
anlamına gelir.
Testler uzaktan yürütülürken devre dışı bırakılabilir. Çünkü runfiles ağaçları, bellek içi manifestlerden uzaktan oluşturulur.
--[no]discard_analysis_cache
Bu seçenek etkinleştirildiğinde Bazel, yürütme başlamadan hemen önce analiz önbelleğini siler. Böylece yürütme aşaması için ek bellek (yaklaşık %10) boşaltılır. Dezavantajı, sonraki artımlı derlemelerin daha yavaş olmasıdır. Ayrıca bellek tasarrufu modu başlıklı makaleye de göz atın.
--[no]keep_going
(-k)
GNU Make'te olduğu gibi, derlemenin yürütme aşaması ilk hatayla karşılaşıldığında durur. Bazen hatalarla karşılaşsanız bile mümkün olduğunca çok şey oluşturmaya çalışmak faydalı olabilir. Bu seçenek, bu davranışı etkinleştirir ve belirtildiğinde derleme, ön koşulları başarıyla oluşturulan her hedefi oluşturmaya çalışır ancak hataları yoksayar.
Bu seçenek genellikle bir derlemenin yürütme aşamasıyla ilişkilendirilse de analiz aşamasını da etkiler: Bir derleme komutunda birden fazla hedef belirtilmişse ancak bunlardan yalnızca bazıları başarıyla analiz edilebiliyorsa --keep_going
belirtilmediği sürece derleme bir hatayla durdurulur. Bu durumda derleme, yürütme aşamasına geçer ancak yalnızca başarıyla analiz edilen hedefler için.
--[no]use_ijars
Bu seçenek, java_library
hedeflerinin Bazel tarafından derlenme şeklini değiştirir. Bağımlı java_library
hedefleri derlemek için java_library
çıktısını kullanmak yerine Bazel, yalnızca özel olmayan üyelerin imzalarını (public, protected ve varsayılan (package) erişim yöntemleri ve alanları) içeren arayüz JAR'ları oluşturur ve bağımlı hedefleri derlemek için arayüz JAR'larını kullanır. Bu sayede, değişiklikler yalnızca yöntem gövdelerinde veya bir sınıfın özel üyelerinde yapıldığında yeniden derleme yapmaktan kaçınmak 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, bir paylaşılan nesnenin uygulanmasından ziyade 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 etkindir. Bu ayar 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, BUILD dosyalarını doğrulamak ve girişlerdeki hataları tespit etmek için yararlı olabilir. Bu işlemde herhangi bir derleme yapılmaz.
--[no]build_tests_only
Belirtilirse Bazel, yalnızca *_test
ve test_suite
kurallarını çalıştırmak için gerekenleri oluşturur. Bu kurallar, boyutları, zaman aşımı, etiketleri veya dilleri nedeniyle filtrelenmemiştir.
Belirtilirse Bazel, komut satırında belirtilen diğer hedefleri yoksayar.
Bu seçenek varsayılan olarak devre dışıdır ve Bazel, testten filtrelenen *_test
ve test_suite
kuralları da dahil olmak üzere istenen her şeyi oluşturur. Bu, bazel test --build_tests_only foo/...
ağacındaki tüm derleme bozulmalarını foo
algılamayabileceğinden faydalıdır.
--[no]check_up_to_date
Bu seçenek, Bazel'in derleme yapmasına değil, 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, dosyalar güncel değilse oluşturulmak yerine bir hata bildirilir ve derleme başarısız olur. Bu seçenek, derleme maliyetine katlanmadan bir derlemenin kaynak düzenlemeden daha yakın bir zamanda yapılıp yapılmadığını belirlemek için (ör. göndermeden önceki kontroller için) yararlı olabilir.
Ayrıca --check_tests_up_to_date
başlıklı makaleyi inceleyin.
--[no]compile_one_dependency
Bağımsız değişken dosyalarının tek bir bağımlılığını derleyin. Bu, IDE'lerde kaynak dosyaların söz dizimini kontrol etmek için kullanışlı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 bu işlemi yapabilirsiniz. Bu bağımsız değişken, işaret içermeyen tüm bağımsız değişkenlerin yorumlanma şeklini etkiler: Her bağımsız değişken, geçerli çalışma dizinine göre bir dosya hedef etiketi veya düz bir dosya adı olmalı ve her kaynak dosya adına bağlı bir kural oluşturulmalıdır. C++ ve Java kaynakları için aynı dil alanındaki kurallar tercihli olarak seçilir. Aynı tercihe sahip birden fazla kural varsa BUILD dosyasında ilk görünen kural seçilir. Bir kaynak dosyaya referans vermeyen, açıkça adlandırılmış bir hedef kalıp hataya neden olur.
--save_temps
--save_temps
seçeneği, derleyicinin geçici çıkışlarının kaydedilmesine neden olur. Bunlar arasında .s dosyaları (assembler kodu), .i (önceden işlenmiş C) ve .ii (önceden işlenmiş C++) dosyaları bulunur. Bu çıkışlar genellikle hata ayıklama için faydalıdır. Yalnızca komut satırında belirtilen hedef grubu için geçici dosyalar oluşturulur.
--save_temps
işareti şu anda yalnızca cc_* kuralları için çalışmaktadır.
Bazel'in ek çıktı dosyalarının konumunu yazdırmasını sağlamak için --show_result n
ayarınızın yeterince yüksek olduğundan emin olun.
--build_tag_filters=tag[,tag]*
Belirtilirse Bazel yalnızca en az bir zorunlu etikete sahip (varsa) ve hariç tutulan etiket içermeyen hedefleri oluşturur. Derleme etiketi filtresi, virgülle ayrılmış etiket anahtar kelimeleri listesi olarak belirtilir. İsteğe bağlı olarak, hariç tutulan etiketleri belirtmek için kullanılan "-" işaretiyle başlar. Gerekli etiketlerin başında da "+" işareti olabilir.
Testler çalıştırılırken Bazel, bu filtreyle eşleşmeseler bile oluşturulan ve çalıştırılan test hedefleri için --build_tag_filters
öğesini yoksayar. Bunları oluşturmaktan kaçınmak için --test_tag_filters
kullanarak veya açıkça hariç tutarak test hedeflerini filtreleyin.
--test_size_filters=size[,size]*
Belirtilirse Bazel yalnızca belirtilen boyuttaki test hedeflerini test eder (veya --build_tests_only
da belirtilmişse oluşturur). Test boyutu filtresi,
izin verilen test boyutu değerlerinin (küçük, orta, büyük veya çok büyük) virgülle ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak, hariç tutulan test boyutlarını belirtmek için kullanılan &39;-&39; işaretiyle başlar. Ö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 ölçekli testleri test eder.
Varsayılan olarak test boyutu filtreleme uygulanmaz.
--test_timeout_filters=timeout[,timeout]*
Belirtilirse Bazel, yalnızca belirtilen zaman aşımıyla test hedeflerini test eder (veya --build_tests_only
da belirtilmişse oluşturur). Test zaman aşımı filtresi,
izin verilen test zaman aşımı değerlerinin (kısa, orta, uzun veya sonsuz) virgülle ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak, hariç tutulan test zaman aşımlarını belirtmek için kullanılan "-" işaretiyle başlar. Örnek söz dizimi için --test_size_filters seçeneğine bakın.
Varsayılan olarak test zaman aşımı filtreleme uygulanmaz.
--test_tag_filters=tag[,tag]*
Belirtilirse Bazel, yalnızca en az bir gerekli etikete (varsa) sahip olan ve hariç tutulan etiket içermeyen test hedeflerini test eder (veya --build_tests_only
da belirtilmişse oluşturur). Test etiketi
filtresi, etiket anahtar kelimelerinin virgülle ayrılmış listesi olarak belirtilir. İsteğe bağlı olarak, hariç tutulan etiketleri belirtmek için kullanılan "-" işaretiyle başlar. Gerekli etiketlerin başında da "+" işareti olabilir.
Örneğin,
% bazel test --test_tag_filters=performance,stress,-flaky //myproject:all
performance
veya stress
etiketiyle etiketlenmiş ancak flaky
etiketiyle etiketlenmemiş hedefleri test eder.
Varsayılan olarak test etiketi filtreleme uygulanmaz. Testin size
ve local
etiketlerine göre de bu şekilde filtreleme yapabileceğinizi unutmayın.
--test_lang_filters=string[,string]*
Test kuralı sınıflarının adlarını ifade eden, virgülle ayrılmış bir dize listesi belirtir. foo_test
kural sınıfına başvurmak için "foo" dizesini kullanın. Bazel, yalnızca referans verilen kural sınıflarının hedeflerini test eder (veya --build_tests_only
da belirtilmişse oluşturur). Bunun yerine bu hedefleri hariç tutmak için "-foo" dizesini kullanın. Örneğin,
% bazel test --test_lang_filters=foo,bar //baz/...
yalnızca //baz/...
içinde foo_test
veya bar_test
örnekleri olan hedefleri test ederken
% bazel test --test_lang_filters=-foo,-bar //baz/...
//baz/...
içindeki tüm hedefler, foo_test
ve bar_test
örnekleri hariç olmak üzere test edilir.
--test_filter=filter-expression
Test çalıştırıcının, çalıştırmak için testlerin bir alt kümesini seçmek üzere kullanabileceği bir filtreyi belirtir. Çağırmada belirtilen tüm hedefler oluşturulur ancak ifadeye bağlı olarak yalnızca bazıları yürütülebilir. Bazı durumlarda yalnızca belirli test yöntemleri çalıştırılır.
filter-expression ifadesinin yorumlanması, testi çalıştırmaktan sorumlu test çerçevesine bağlıdır. Glob, alt dize veya normal ifade olabilir. --test_filter
, farklı --test_arg
filtre bağımsız değişkenlerini iletmeye kıyasla daha kolay bir yöntemdir ancak tüm çerçeveler tarafından desteklenmez.
Ayrıntı düzeyi
Bu seçenekler, Bazel'in çıkışının ayrıntı düzeyini (terminale veya ek günlük dosyalarına) kontrol eder.
--explain=logfile
Dosya adı bağımsız değişkeni gerektiren bu seçenek, bazel build
'nın yürütme aşamasındaki bağımlılık denetleyicisinin her derleme adımı için neden yürütüldüğünü veya güncel olduğunu açıklamasını sağlar. Açıklama logfile'a yazılır.
Beklenmedik yeniden derlemelerle karşılaşıyorsanız bu seçenek, nedeni anlamanıza yardımcı olabilir. Bunu .bazelrc
öğenize ekleyin. Böylece, sonraki tüm derlemeler için günlük kaydı oluşturulur. Ardından, bir yürütme adımının beklenmedik şekilde yürütüldüğünü gördüğünüzde günlüğü inceleyin. Bu seçenek küçük bir performans cezası getirebilir. Bu nedenle, artık gerekli olmadığında kaldırmanız önerilir.
--verbose_explanations
Bu seçenek, --explain seçeneği etkinleştirildiğinde oluşturulan açıklamaların ayrıntı düzeyini artırır.
Özellikle ayrıntılı açıklamalar etkinleştirilmişse ve oluşturmak için kullanılan komut değiştiğinden bir çıkış dosyası yeniden oluşturulursa açıklama dosyasındaki çıkış, yeni komutun tüm ayrıntılarını içerir (en azından çoğu komut için).
Bu seçeneğin kullanılması, oluşturulan açıklama dosyasının uzunluğunu ve --explain
kullanımının performans cezasını önemli ölçüde artırabilir.
--explain
etkinleştirilmemişse --verbose_explanations
politikasının etkisi olmaz.
--profile=file
Dosya adı bağımsız değişkeni alan bu seçenek, Bazel'in profil oluşturma verilerini bir dosyaya yazmasına neden olur. Veriler daha sonra bazel analyze-profile
komutu kullanılarak analiz edilebilir veya ayrıştırılabilir. Derleme profili, Bazel'in build
komutunun zamanını nerede harcadığını anlamak için faydalı olabilir.
--[no]show_loading_progress
Bu seçenek, Bazel'in paket yükleme ilerleme durumu mesajlarını vermesine neden olur. Devre dışı bırakılırsa iletiler gösterilmez.
--[no]show_progress
Bu seçenek, ilerleme durumu mesajlarının gösterilmesine neden olur ve varsayılan olarak etkindir. Devre dışı bırakıldığında ilerleme durumu mesajları gösterilmez.
--show_progress_rate_limit=n
Bu seçenek, bazel'in en fazla n
saniyede bir ilerleme mesajı göstermesine neden olur. Burada n gerçek bir sayıdır.
Bu seçeneğin varsayılan değeri 0,02'dir. Bu değer, Bazel'in ilerleme mesajlarını 0,02 saniyede bir ile sınırlayacağı anlamına gelir.
--show_result=n
Bu seçenek, bazel build
komutunun sonunda sonuç bilgilerinin yazdırılmasını kontrol eder. Varsayılan olarak, tek bir derleme hedefi belirtilmişse Bazel, hedefin başarıyla güncellenip güncellenmediğini ve güncellendiyse hedefin oluşturduğu çıkış dosyalarının listesini belirten bir mesaj yazdırır. Birden fazla hedef belirtilmişse sonuç bilgileri gösterilmez.
Sonuç bilgileri tek bir hedef veya birkaç hedef içeren derlemeler için faydalı olsa da büyük derlemelerde (ör. üst düzey bir proje ağacının tamamı) bu bilgiler kafa karıştırıcı ve dikkat dağıtıcı olabilir. Bu seçenek, bilgilerin kontrol edilmesine olanak tanır. --show_result
tam sonuç bilgilerinin yazdırılması gereken maksimum hedef sayısını belirten bir tam sayı bağımsız değişkeni alır. Varsayılan olarak değer 1'dir. Bu eşiğin üzerinde, tek tek hedefler için sonuç bilgisi gösterilmez. Bu nedenle, sıfır değeri her zaman sonuç bilgilerinin gizlenmesine, çok büyük bir değer ise her zaman sonucun yazdırılmasına neden olur.
Kullanıcılar, düzenli olarak küçük bir hedef grubu oluşturma (örneğin, derleme-düzenleme-test döngüsü sırasında) ve büyük bir hedef grubu oluşturma (örneğin, yeni bir çalışma alanı oluştururken veya regresyon testleri çalıştırırken) arasında geçiş yapıyorsa bu iki değer arasında bir değer seçmek isteyebilir. İlk durumda sonuç bilgileri çok faydalı olurken ikinci durumda daha az faydalı olur. Tüm seçeneklerde olduğu gibi bu da .bazelrc
dosyası aracılığıyla dolaylı olarak belirtilebilir.
Dosyalar, dosya adının kabuğa kopyalanıp yapıştırılmasını ve derlenmiş yürütülebilir dosyaların çalıştırılmasını kolaylaştıracak şekilde yazdırılır. Her hedef için "güncel" veya "başarısız" mesajları, derlemeyi yönlendiren komut dosyaları tarafından kolayca ayrıştırılabilir.
--sandbox_debug
Bu seçenek, Bazel'in işlem yürütme için sanal alan kullanırken ek hata ayıklama bilgileri yazdırmasına neden olur. Bu seçenek, yürütme sırasında işlemlere görünür olan dosyaların incelenebilmesi için korumalı alan dizinlerini de korur.
--subcommands
(-s
)
Bu seçenek, Bazel'in yürütme aşamasında her komutun tam komut satırını yazdırmasına neden olur.
>>>>> # //examples/cpp:hello-world [action 'Linking examples/cpp/hello-world'] (cd /home/johndoe/.cache/bazel/_bazel_johndoe/4c084335afceb392cfbe7c31afee3a9f/bazel && \ exec env - \ /usr/bin/gcc -o bazel-out/local-fastbuild/bin/examples/cpp/hello-world -B/usr/bin/ -Wl,-z,relro,-z,now -no-canonical-prefixes -pass-exit-codes -Wl,-S -Wl,@bazel-out/local_linux-fastbuild/bin/examples/cpp/hello-world-2.params)
Mümkün olduğunda komutlar, Bourne kabuğuyla uyumlu bir söz diziminde yazdırılır. Böylece, kabuk komut istemine kolayca kopyalanıp yapıştırılabilir.
(Çevreleyen parantezler, kabuğunuzu cd
ve exec
çağrılarından korumak için sağlanır; bunları kopyaladığınızdan emin olun.)
Ancak sembolik bağlantı ağaçları oluşturma gibi bazı komutlar 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 kullanılabilir. Bu, uzun komut satırlarının daha okunabilir olmasına yardımcı olabilir.
Aşağıdaki --verbose_failures bölümüne de bakın.
Alt komutları araca uygun bir biçimde dosyaya 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ında başarısız olan komutlar için tam komut satırının yazdırılmasına neden olur. Bu, başarısız bir derlemede hata ayıklama açısından çok değerli olabilir.
Başarısız olan komutlar, Bourne kabuğuyla uyumlu bir söz diziminde yazdırılır. Bu söz dizimi, kabuk istemine kopyalayıp yapıştırmak için uygundur.
Workspace durumu
Bazel ile oluşturulan ikili dosyaları "damgalamak" için bu seçenekleri kullanın. Örneğin, kaynak kontrolü revizyonu veya çalışma alanıyla ilgili diğer bilgiler gibi ek bilgileri ikili dosyalara yerleştirebilirsiniz. Bu mekanizmayı stamp
özelliğini destekleyen kurallarla (ör. genrule
, cc_binary
) birlikte kullanabilirsiniz.
--workspace_status_command=program
Bu işaret, Bazel'in her derlemeden önce çalıştırdığı bir ikili belirtmenize olanak tanır. Program, çalışma alanının durumuyla ilgili bilgileri (ör. mevcut kaynak kontrolü düzeltmesi) raporlayabilir.
İşaretin değeri, yerel bir programa giden yol olmalıdır. Linux/macOS'te bu, herhangi bir yürütülebilir dosya olabilir. Windows'da bu, genellikle ".exe", ".bat" veya ".cmd" dosyası olan yerel bir ikili dosya olmalıdır.
Program, standart çıkışa sıfır veya daha fazla anahtar/değer çifti yazdırmalıdır. Her satırda bir giriş olmalı ve ardından sıfır ile çıkmalıdır (aksi takdirde derleme başarısız olur). Anahtar adları herhangi bir şey olabilir ancak yalnızca büyük harfler ve alt çizgiler kullanılabilir. Anahtar adından sonraki ilk boşluk, anahtar adını değerden ayırır. Değer, satırın geri kalan kısmıdır (ek boşluklar dahil). Anahtar da değer de birden fazla satıra yayılamaz. Anahtarlar yinelenmemelidir.
Bazel, anahtarları "kararlı" ve "uçucu" olmak üzere iki gruba ayırır. ("Kararlı" ve "uçucu" adları biraz sezgiye aykırı olduğundan bu adlar hakkında fazla düşünmeyin.)
Ardından Bazel, anahtar/değer çiftlerini iki dosyaya yazar:
bazel-out/stable-status.txt
Anahtarın adıSTABLE_
ile başlayan tüm anahtarları ve değerleri içerir.bazel-out/volatile-status.txt
diğer anahtarları ve değerlerini içerir
Sözleşme:
"Sabit" anahtarların değerleri mümkünse nadiren değiştirilmelidir.
bazel-out/stable-status.txt
içeriği değişirse Bazel, bunlara 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 sürekli değiştiği için zaman damgaları gibi öğeler içermemelidir. Bu durum, Bazel'in her derlemede damgalanmış işlemleri yeniden çalıştırmasına neden olur.Bazel her zaman aşağıdaki kararlı anahtarları çıkarır:
BUILD_EMBED_LABEL
:--embed_label
değeriBUILD_HOST
: Bazel'in üzerinde çalıştığı ana makinenin adıBUILD_USER
: Bazel'in çalıştırıldığı kullanıcının adı
"Değişken" anahtarların değerleri sık sık değişebilir. Bazel, bunların zaman damgaları gibi sürekli değişmesini bekler ve
bazel-out/volatile-status.txt
dosyasını buna göre günceller. Ancak damgalı işlemlerin sürekli olarak yeniden çalıştırılmasını önlemek için Bazel, değişken dosyanın hiçbir zaman değişmediğini varsayar. Başka bir deyişle, içerikleri değişen tek dosya geçici durum dosyasıysa Bazel, kendisine bağlı işlemleri geçersiz kılmaz. İşlemlerin diğer girişleri değiştiyse Bazel bu işlemi yeniden çalıştırır ve işlem, güncellenen geçici durumu görür. Ancak yalnızca geçici durumun değişmesi işlemi geçersiz kılmaz.Bazel her zaman aşağıdaki geçici anahtarları çıkarır:
BUILD_TIMESTAMP
: Unix Epoch'tan bu yana saniye cinsinden derleme zamanı (System.currentTimeMillis()
değerinin bine bölünmesiyle elde edilir)FORMATTED_DATE
: Derleme zamanı. UTC'ye göreyyyy MMM d HH mm ss EEE
(ör. 2023 Jun 2 01 44 29 Fri) biçiminde.
Linux/macOS'te, true
hiçbir şey yapmadığı, başarıyla çıktığı (sıfırla çıkar) ve çıktı yazdırmadığı için --workspace_status_command=/bin/true
değerini ileterek çalışma alanı durumunun alınmasını devre dışı bırakabilirsiniz. Windows'da aynı etki için MSYS'nin true.exe
yolunu iletebilirsiniz.
Çalışma alanı durumu komutu herhangi bir nedenle başarısız olursa (sıfır olmayan bir değerle çıkış yaparsa) derleme başarısız olur.
Git'i kullanarak Linux'ta ö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 iletin. Kararlı durum dosyası, STABLE satırlarını içerir. Değişken durum dosyası ise satırların geri kalanını içerir.
--[no]stamp
Bu seçenek, stamp
kural özelliğiyle birlikte, derleme bilgilerinin ikili dosyalara yerleştirilip yerleştirilmeyeceğini kontrol eder.
Damgalama, stamp
özelliği kullanılarak kural bazında açıkça etkinleştirilebilir veya devre dışı bırakılabilir. Ayrıntılar için lütfen Build Ansiklopedisi'ne bakın. Bir kural stamp = -1
olarak ayarlandığında (*_binary
kuralları için varsayılan), bu seçenek damgalama özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirler.
Bazel, bu seçenekten veya stamp
özelliğinden bağımsız olarak, hiçbir zaman yürütme yapılandırması için oluşturulan ikili dosyaları damgalamaz. stamp =
0
(*_test
kuralları için varsayılan) değerini ayarlayan kurallar için, --[no]stamp
değerinden bağımsız olarak damgalama devre dışı bırakılır. --stamp
belirtilmesi, bağımlılıkları değişmediyse hedeflerin yeniden oluşturulmasını zorunlu kılmaz.
--nostamp
ayarı, giriş değişkenliğini azaltıp derleme önbelleğe almayı en üst düzeye çıkardığı için genellikle derleme performansı açısından tercih edilir.
Platform
Derlemelerin nasıl çalıştığını yapılandıran ana makine ve hedef platformları kontrol etmek, ayrıca Bazel kuralları için hangi yürütme platformlarının ve araç zincirlerinin kullanılabileceğini kontrol etmek için bu seçenekleri kullanın.
Lütfen Platformlar ve Araç Zincirleri ile ilgili arka plan bilgilerini inceleyin.
--platforms=labels
Geçerli komutun hedef platformlarını açıklayan platform kurallarının etiketleri.
--host_platform=label
Barındırıcı sistemi açıklayan bir platform kuralının etiketi.
--extra_execution_platforms=labels
İşlemleri çalıştırmak için yürütme platformu olarak kullanılabilen platformlar. Platformlar, tam hedef veya hedef kalıbı olarak belirtilebilir. Bu platformlar, register_execution_platforms() ile MODULE.bazel dosyalarında belirtilenlerden önce dikkate alınır. Bu seçenek, öncelik sırasına göre virgülle ayrılmış bir platform listesini kabul eder. İşaret birden çok kez iletilirse en son iletilen işaret geçerli olur.
--extra_toolchains=labels
Araç zinciri çözümlemesi sırasında dikkate alınacak araç zinciri kuralları. Araç zincirleri, tam hedef veya hedef kalıbı olarak belirtilebilir. Bu araç zincirleri, register_toolchains() tarafından MODULE.bazel dosyalarında belirtilenlerden önce dikkate alınır.
--toolchain_resolution_debug=regex
Araç zinciri türü normal ifadeyle eşleşiyorsa araç zincirleri bulunurken hata ayıklama bilgilerini yazdırın. Birden fazla normal ifade virgülle ayrılabilir. Normal ifade, başında -
işareti kullanılarak olumsuzlanabilir. Bu, Bazel veya Starlark kurallarının geliştiricilerinin eksik araç zincirleri nedeniyle hata ayıklama hatalarını gidermesine 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şaretidir. Daha fazla bilgi için Starlark Yapılandırmaları başlıklı makaleyi inceleyin.
--symlink_prefix=string
Oluşturulan kolaylık sembolik bağlantılarının önekini değiştirir. Sembolik bağlantı önekinin varsayılan değeri bazel-
'dır. 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 uyarı verilir ancak derleme yine de başarılı kabul edilir. Bu özellik, özellikle salt okunur bir dizinde veya yazma izninizin olmadığı bir dizinde derleme yapmanıza olanak tanır. Derleme sonunda bilgilendirme mesajlarında yazdırılan tüm yollar, sembolik bağlantılar beklenen konumu işaret ediyorsa yalnızca sembolik bağlantıya göre kısa biçimi kullanır. Başka bir deyişle, sembolik bağlantıların oluşturulduğundan emin olmasanız bile bu yolların doğruluğuna güvenebilirsiniz.
Bu seçeneğin bazı yaygın değerleri:
Sembolik bağlantı oluşturmayı devre dışı bırak:
--symlink_prefix=/
, Bazel'inbazel-out
vebazel-<workspace>
sembolik bağlantıları da dahil olmak üzere herhangi bir sembolik bağlantı oluşturmasına veya güncellemesine neden olmaz. Sembolik bağlantı oluşturmayı tamamen devre dışı bırakmak için bu seçeneği kullanın.Dağınıklığı azaltma:
--symlink_prefix=.bazel/
, Bazel'in.bazel
adlı gizli bir dizindebin
(vb.) adlı sembolik bağlantılar oluşturmasına neden olur.
--platform_suffix=string
Yapılandırmanın kısa adına, çıkış dizinini belirlemek için kullanılan bir sonek ekler. Bu seçeneği farklı değerlere ayarlamak, dosyaları farklı dizinlere yerleştirir. Örneğin, aksi takdirde birbirlerinin çıkış dosyalarını üzerine yazacak olan derlemeler için önbellek isabet oranlarını iyileştirmek veya çıkış dosyalarını karşılaştırma için saklamak gibi.
--default_visibility=(private|public)
Bazel'in varsayılan görünürlük değişikliklerini test etmek için kullanılan geçici işaret. Genel kullanım için tasarlanmamıştır ancak eksiksiz olması için belgelenmiştir.
--starlark_cpu_profile=_file_
Değeri bir dosyanın adı olan bu işaret, Bazel'in tüm Starlark iş parçacıkları tarafından CPU kullanımıyla ilgili istatistikleri toplamasını ve profili pprof biçiminde adlandırılmış dosyaya yazmasını sağlar.
Aşırı hesaplama nedeniyle yükleme ve analiz işlemlerini yavaşlatan Starlark işlevlerini belirlemek için bu seçeneği kullanın. Örneğin:
$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/... $ pprof /tmp/pprof.gz (pprof) top Type: CPU Time: Feb 6, 2020 at 12:06pm (PST) Duration: 5.26s, Total samples = 3.34s (63.55%) Showing nodes accounting for 3.34s, 100% of 3.34s total flat flat% sum% cum cum% 1.86s 55.69% 55.69% 1.86s 55.69% sort_source_files 1.02s 30.54% 86.23% 1.02s 30.54% expand_all_combinations 0.44s 13.17% 99.40% 0.44s 13.17% range 0.02s 0.6% 100% 3.34s 100% sorted 0 0% 100% 1.38s 41.32% my/project/main/BUILD 0 0% 100% 1.96s 58.68% my/project/library.bzl 0 0% 100% 3.34s 100% main
Aynı verilerin farklı görünümleri için pprof
komutlarını svg
, web
ve list
deneyin.
Yayınlar için Bazel'i kullanma
Bazel, hem geliştirme döngüsü sırasında yazılım mühendisleri hem de üretimde dağıtım için ikili dosyaları hazırlarken yayın mühendisleri tarafından kullanılır. Bu bölümde, Bazel kullanan yayın mühendisleri için ipuçlarının listesi verilmektedir.
Önemli seçenekler
Yayın derlemeleri için Bazel kullanılırken, derleme gerçekleştiren diğer komut dosyalarında olduğu gibi aynı sorunlar ortaya çıkar. Daha fazla bilgi için Komut dosyalarından Bazel'i çağırma başlıklı makaleyi inceleyin. Özellikle aşağıdaki seçeneklerin kullanılması önemle tavsiye edilir:
Aşağıdaki seçenekler de önemlidir:
--package_path
--symlink_prefix
: Birden fazla yapılandırmanın derlemelerini yönetmek için her derlemeyi "64 bit" ve "32 bit" gibi farklı bir tanımlayıcıyla ayırt etmek uygun olabilir. Bu seçenek,bazel-bin
(vb.) sembolik bağlantılarını ayırt eder.
Testleri çalıştırma
Bazel ile test oluşturmak ve çalıştırmak için bazel test
yazıp test hedeflerinin adını girin.
Bu komut, varsayılan olarak eşzamanlı derleme ve test işlemi gerçekleştirir. Belirtilen tüm hedefleri (komut satırında belirtilen test dışı hedefler dahil) derler ve ön koşulları derlenir derlenmez *_test
ve test_suite
hedeflerini test eder. Bu nedenle, test yürütme işlemi derleme işlemiyle birlikte yapılır. 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) olarak ayarlanırsa Bazel yalnızca aşağıdaki koşullardan herhangi biri geçerliyse testi yeniden çalıştırır:
- Bazel, testteki veya bağımlılıklarındaki değişiklikleri algılar.
- test
external
olarak işaretlenir. --runs_per_test
ile birden fazla test çalıştırması istendi- test başarısız oldu.
"Hayır" ise tüm testler koşulsuz olarak yürütülür.
"Evet" ise önbelleğe alma davranışı, otomatik ile aynı olur. Ancak --runs_per_test
ile test hatalarını ve test çalıştırmalarını önbelleğe alabilir.
Bu seçeneği .bazelrc
dosyalarında varsayılan olarak etkinleştirmiş olan kullanıcılar, belirli bir çalıştırmada varsayılanı 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'a testleri çalıştırmamasını, yalnızca önbelleğe alınmış test sonuçlarını kontrol edip raporlamasını söyler. Daha önce oluşturulmamış ve çalıştırılmamış veya test sonuçları güncel olmayan (örneğin, kaynak kod ya da derleme seçenekleri değiştiği için) testler varsa Bazel bir hata mesajı ("test sonucu güncel değil") bildirir, testin durumunu "NO STATUS" (renkli çıktı 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
davranışını da ifade eder.
Bu seçenek, gönderme öncesi kontroller için yararlı olabilir.
--test_verbose_timeout_warnings
Bu seçenek, bir testin zaman aşımı süresi testin gerçek yürütme süresinden önemli ölçüde uzunsa Bazel'in kullanıcıyı açıkça uyarmasını sağlar. Bir testin zaman aşımı, kararsız olmayacak şekilde ayarlanmalıdır. Ancak çok yüksek bir zaman aşımı olan test, beklenmedik şekilde ortaya çıkan gerçek sorunları gizleyebilir.
Örneğin, normalde bir veya iki dakikada yürütülen bir testin zaman aşımı ETERNAL veya LONG olmamalıdır. Bu değerler çok fazla zaman tanır.
Bu seçenek, kullanıcıların iyi bir zaman aşımı değeri belirlemesine 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 derleme, geçilmeyen herhangi bir testte durdurulur. Sonraki derleme adımları ve test çağrıları çalıştırılmaz, devam eden çağrılar ise iptal edilir.
Hem --notest_keep_going
hem de --keep_going
belirtmeyin.
--flaky_test_attempts=attempts
Bu seçenek, herhangi bir nedenle başarısız olursa bir testin en fazla kaç kez denenmesi gerektiğini belirtir. Başlangıçta başarısız olan ancak sonunda başarılı olan bir test, test özetinde FLAKY
olarak bildirilir. Ancak, Bazel çıkış kodunu veya toplam başarılı test sayısını belirleme konusunda başarılı olarak 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ılmasını önlemek için en fazla 10 test denemesine izin verir.
--runs_per_test=[regex@]number
Bu seçenek, her testin kaç kez yürütülmesi gerektiğini belirtir. Tüm test yürütmeleri ayrı testler olarak değerlendirilir (her biri için ayrı ayrı yedek işlev uygulanır).
Çalıştırmaları başarısız olan bir hedefin durumu, --runs_per_test_detects_flakes
işaretinin değerine bağlıdır:
- Bu parametre yoksa başarısız olan her çalıştırma, testin tamamının başarısız olmasına neden olur.
- Aynı parçadan iki çalıştırma varsa ve biri PASS (BAŞARILI), diğeri FAIL (BAŞARISIZ) döndürürse test, güvenilmez (flaky) durumunu alır (diğer başarısız çalıştırmalar başarısız olmasına neden olmadıkça).
Tek bir sayı belirtilirse tüm testler o kadar kez çalıştırılır.
Alternatif olarak, regex@number söz dizimi kullanılarak normal ifade belirtilebilir. Bu, --runs_per_test
efektini, normal ifadeyle eşleşen hedeflerle kısıtlar (--runs_per_test=^//pizza:.*@4
, //pizza/
altındaki tüm testleri 4 kez çalıştırır).
Bu --runs_per_test
biçimi birden fazla kez belirtilebilir.
--[no]runs_per_test_detects_flakes
Bu seçenek belirtilirse (varsayılan olarak belirtilmez) Bazel, --runs_per_test
aracılığıyla kararsız test parçalarını algılar. 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 bildirir.
--test_summary=output_style
Test sonucu özetinin nasıl gösterileceğini belirtir.
short
Test başarısız olursa test çıktısını içeren dosyanın adıyla birlikte her testin sonuçlarını yazdırır. Bu, varsayılan değerdir.terse
gibishort
, ancak daha kısa: yalnızca geçilmeyen testlerle ilgili bilgileri yazdırır.detailed
yalnızca her testi değil, başarısız olan her bir test durumunu ayrı ayrı yazdırır. Test çıkış dosyalarının adları atlanır.none
test özetini yazdırmaz.
--test_output=output_style
Test çıktısının nasıl gösterileceğini belirtir:
summary
, her testin başarılı olup olmadığına dair bir özet gösterir. Ayrıca, başarısız testlerin çıkış günlük dosyası adını da gösterir. Özet, derlemenin sonunda (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) yazdırılır. 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öndererek eşzamanlı testlerden gelen test çıkışının birbirine karışmamasını sağlar. Yukarıdaki özet çıkışına göre derlemede bir özet yazdırır.all
,errors
özelliğine benzer ancak geçenler de dahil olmak üzere tüm testlerin çıkışını yazdırır.streamed
Her testten gelen stdout/stderr çıkışını gerçek zamanlı olarak aktarır.
--java_debug
Bu seçenek, bir Java testinin Java sanal makinesinin teste başlamadan ö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 durumda, test süreleri ve diğer ek bilgiler (ör. test denemeleri) test özetine yazdırılır. --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 karakteri aşmayacak şekilde biçimlendirilir.
--test_tmpdir=path
Yerel olarak yürütülen testler için geçici dizini belirtir. Her test, bu dizinin içinde ayrı bir alt dizinde yürütülür. Dizin, her bazel test
komutunun başında temizlenir.
Bazel, bu dizini varsayılan olarak Bazel çıkış tabanı dizininin altına yerleştirir.
--test_timeout=seconds
VEYA --test_timeout=seconds,seconds,seconds,seconds
Belirtilen saniye sayısı yeni bir zaman aşımı değeri olarak kullanılarak tüm testlerin zaman aşımı değeri geçersiz kılınır. 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 süresiz testler için ayrı ayrı zaman aşımlarını belirten dört virgülle ayrılmış değer (bu sırayla) sağlanabilir. Her iki biçimde de test boyutlarından herhangi biri için sıfır veya negatif bir değer, Writing Tests (Test Yazma) sayfasında tanımlandığı gibi, verilen zaman aşımı kategorileri için varsayılan zaman aşımıyla değiştirilir. Varsayılan olarak Bazel, boyutu örtülü veya açıkça ayarlanmış olsun, testin boyutundan zaman aşımı sınırını çıkararak tüm testler için bu zaman aşımlarını kullanır.
Zaman aşımı kategorisini boyutundan farklı olarak açıkça belirten testler, zaman aşımı boyut etiketiyle örtülü olarak ayarlanmış gibi aynı değeri alır. Bu nedenle, "uzun" bir zaman aşımı bildiren "küçük" boyutlu bir test, açık bir zaman aşımı olmayan "büyük" boyutlu bir testle aynı etkin zaman aşımına sahip olur.
--test_arg=arg
Komut satırı seçeneklerini/işaretlerini/bağımsız değişkenlerini her test sürecine 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
.
bazel run
komutunun aksine, test bağımsız değişkenlerini doğrudan bazel test -- target --logtostderr --v=3
komutunda olduğu gibi geçiremeyeceğinizi unutmayın. Bunun nedeni, bazel test
işlevine iletilen gereksiz bağımsız değişkenlerin ek test hedefleri olarak yorumlanmasıdır. Yani --logtostderr
ve --v=3
, her biri bir test hedefi olarak yorumlanır. Bu belirsizlik, yalnızca tek bir hedefi kabul eden bazel run
komutunda yoktur.
--test_arg
, bazel run
komutuna iletilebilir ancak çalıştırılan hedef bir test hedefi olmadığı sürece yoksayılır. (Diğer tüm işaretlerde olduğu gibi, bazel run
komutunda --
jetonundan sonra iletilirse Bazel tarafından işlenmez ancak yürütülen hedefe olduğu gibi iletilir.)
--test_env=variable=_value_
VEYA --test_env=variable
Her test için test ortamına eklenmesi gereken ek değişkenleri belirtir. value belirtilmemişse bazel test
komutunu başlatmak için kullanılan kabuk ortamından devralınır.
Ortama, System.getenv("var")
(Java), getenv("var")
(C veya C++) kullanılarak bir testin içinden erişilebilir.
--run_under=command-prefix
Bu, test çalıştırıcının çalıştırmadan önce test komutunun önüne ekleyeceği bir önek belirtir. command-prefix, Bourne shell belirteçleştirme 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 etikettir (//
ile başlar) ve 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ı uyarılar geçerlidir:
- Testleri çalıştırmak için kullanılan PATH, ortamınızdaki PATH'ten 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 boyut, zaman aşımı, etiket veya dil'e göre filtreleyebilirsiniz. Bir kolaylık genel ad filtresi, belirli filtre bağımsız değişkenlerini test çalıştırıcıya 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 hedef oluşturmak ve çalıştırmak için kullanılması dışında bazel build
komutuna benzer. Tipik bir oturum örneği (//java/myapp:myapp
merhaba diyor ve bağımsız değişkenlerini yazdırıyor):
% bazel run java/myapp:myapp -- --arg1 --arg2 INFO: Analyzed target //java/myapp:myapp (13 packages loaded, 27 targets configured). INFO: Found 1 target... Target //java/myapp:myapp up-to-date: bazel-bin/java/myapp/myapp INFO: Elapsed time: 14.290s, Critical Path: 5.54s, ... INFO: Build completed successfully, 4 total actions INFO: Running command line: bazel-bin/java/myapp/myapp <args omitted> Hello there $EXEC_ROOT/java/myapp/myapp --arg1 --arg2
bazel run
, doğrudan Bazel tarafından oluşturulan ikiliyi çağırmaya benzer ancak aynı değildir ve davranışı, çağrılacak ikilinin test olup olmamasına bağlı olarak değişir.
İkili dosya bir test olmadığında, geçerli çalışma dizini ikili dosyanın runfiles ağacı olur.
İkili dosya bir test olduğunda geçerli çalışma dizini yürütme kökü olur ve testlerin genellikle çalıştırıldığı ortamı kopyalamak için iyi niyetli bir girişimde bulunulur. Ancak emülasyon mükemmel değildir ve birden fazla parçaya sahip testler bu şekilde çalıştırılamaz (bunu çözmek için --test_sharding_strategy=disabled
komut satırı seçeneği kullanılabilir).
Aşağıdaki ek ortam değişkenleri de ikili için kullanılabilir:
BUILD_WORKSPACE_DIRECTORY
: Derlemenin çalıştırıldığı çalışma alanının kökü.BUILD_WORKING_DIRECTORY
: Bazel'in çalıştırıldığı mevcut çalışma dizini.
Örneğin, komut satırındaki dosya adlarını kullanıcı dostu bir şekilde yorumlamak için kullanılabilir.
bazel run
için seçenekler
--run_under=command-prefix
Bu, --run_under
seçeneğiyle aynı etkiye sahiptir (yukarıya bakın).
Ancak bu seçenek, 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 test
Bazel'den gelen günlük çıktılarını filtreleme
bazel run
ile bir ikili program çağrıldığında Bazel, Bazel'in kendisinden ve çağrılan ikili programdan günlük kaydı çıktısı yazdırır. Günlüklerin daha az gürültülü olması için --ui_event_filters
ve --noshow_progress
işaretleriyle Bazel'in kendi çıkışlarını bastırabilirsiniz.
Ö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, testin Test Yazma bölümünde açıklanan ortama yakın bir şekilde çalıştırılmasına neden olur. Bu şekilde test çalıştırırken --test_arg
dışında --test_*
bağımsız değişkenlerinin hiçbirinin etkisi olmadığını unutmayın .
Derleme çıkışlarını temizleme
clean
komutu
Bazel'de Make'inkine 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ın çıkış dizini temizlenir.
Her Bazel örneğinin tek bir çalışma alanıyla ilişkili olduğunu hatırlayın. Bu nedenle, clean
komutu, söz konusu çalışma alanında o Bazel örneğiyle yaptığınız tüm derlemelerdeki tüm çıktıları siler.
Bir Bazel örneği tarafından oluşturulan çalışma ağacının tamamını tamamen kaldırmak için --expunge
seçeneğini belirtebilirsiniz. --expunge
ile yürütüldüğünde temizleme komutu, derleme çıktısına ek olarak Bazel tarafından oluşturulan tüm geçici dosyaları içeren tüm çıktı tabanı ağacını kaldırır. Ayrıca, temizleme işleminden sonra Bazel sunucusunu durdurur. Bu işlem, shutdown
komutuna eşdeğerdir. Örneğin, bir Bazel örneğinin tüm disk ve bellek izlerini temizlemek için şunu belirtebilirsiniz:
% bazel clean --expunge
Alternatif olarak, --expunge_async
simgesini kullanarak arka planda silme işlemini yapabilirsiniz. Asenkron silme işlemi çalışmaya devam ederken aynı istemcide bir Bazel komutu çağırmak güvenlidir.
clean
komutu, öncelikle artık ihtiyaç duyulmayan çalışma alanları için disk alanını geri kazanma amacıyla sağlanır.
Bazel'in artımlı yeniden derlemeleri mükemmel olmayabilir. Bu nedenle, sorunlar ortaya çıktığında tutarlı bir durumu kurtarmak için clean
kullanılabilir.
Bazel'in tasarımı, bu sorunların düzeltilebilmesini ve bu hataların düzeltilmesinin yüksek öncelikli olmasını sağlar. Yanlış bir artımlı derleme bulursanız clean
yerine hata raporu gönderin ve araçlardaki 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, query ve cquery olmak üzere iki komut tarafından kullanılır. İki komut arasındaki temel fark, sorgunun 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 üzerinde cebirsel işlemler fikrine dayanır ve
Bazel Query Reference (Bazel Sorgu Referansı). Referans, örnekler ve sorguya özel komut satırı seçenekleri için lütfen bu belgeye bakın.
Sorgu aracı, çeşitli komut satırı seçeneklerini kabul eder. --output
çıkış biçimini seçer.
--[no]keep_going
(varsayılan olarak devre dışıdır) sorgu aracının hatalar oluştuğunda 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, sorgunun üzerinde çalıştığı bağımlılık grafiğine örtülü bağımlılıkların dahil edilmesine neden olur. Örtülü bağımlılık, BUILD dosyasında açıkça belirtilmeyen ancak Bazel tarafından eklenen bağımlılıktır.
Örnek: "PEBL ağacındaki tüm testleri oluşturmak için gereken tüm genrule'ların tanımlarının (BUILD dosyalarında) konumlarını göster."
bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'
İşlem grafiğini sorgulama
aquery
komutu, derleme grafiğinizdeki işlemler için sorgu oluşturmanıza olanak tanır.
Yapılandırılmış hedef grafiği üzerinde analiz sonrası çalışır ve işlemler, yapılar ve bunların ilişkileri hakkında bilgi verir.
Araç, çeşitli komut satırı seçeneklerini kabul eder.
--output
çıkış biçimini seçer. Varsayılan çıkış biçimi (text
) kullanıcılar tarafından okunabilir. Makine tarafından okunabilir biçim için proto
veya textproto
kullanın.
Özellikle aquery komutu, normal bir Bazel derlemesinin üzerinde çalışır ve derleme sırasında kullanılabilen seçenekler grubunu devralır.
Geleneksel query
, siblings
, buildfiles
ve tests
cihazlarda da kullanılabilen işlevleri destekler.
Daha fazla bilgi için İşlem Grafiği Sorgusu başlıklı makaleyi inceleyin.
Çeşitli komutlar ve seçenekler
help
help
komutu, çevrimiçi yardım sağlar. Varsayılan olarak, Building with Bazel'de gösterildiği gibi, kullanılabilir komutların ve yardım konularının bir özetini gösterir.
Bir bağımsız değişken belirtmek, belirli bir konuyla ilgili ayrıntılı yardım bilgilerini gösterir. Çoğu konu, build
veya query
gibi Bazel komutlarıdır ancak komutlara karşılık gelmeyen bazı ek yardım konuları da vardır.
--[no]long
(-l
)
Varsayılan olarak bazel help [topic]
, bir konuyla ilgili seçeneklerin yalnızca özetini yazdırır. --long
seçeneği belirtilirse her seçeneğin türü, varsayılan değeri ve tam açıklaması da yazdırılır.
shutdown
Bazel sunucu işlemleri, shutdown
komutu kullanılarak durdurulabilir. Bu komut, Bazel sunucusunun boşta kalır kalmaz (ör. şu anda devam eden tüm derlemeler veya diğer komutlar tamamlandıktan sonra) çıkmasına neden olur. Daha fazla bilgi için İstemci/sunucu uygulaması başlıklı makaleyi inceleyin.
Bazel sunucuları boşta kalma zaman aşımından sonra kendilerini durdurur. Bu nedenle bu komut nadiren gereklidir. Ancak belirli bir çalışma alanında başka derleme olmayacağı bilindiğinde komut dosyalarında yararlı olabilir.
shutdown
, bir seçenek olan --iff_heap_size_greater_than _n_
'ı kabul eder. Bu seçenek için bir tam sayı bağımsız değişkeni (MB cinsinden) gerekir. Belirtilirse bu, kapatmayı halihazırda kullanılan bellek miktarına bağlı hale getirir. Bu, çok sayıda derleme başlatan komut dosyaları için yararlıdır. Bazel sunucusundaki bellek sızıntıları, sunucunun zaman zaman beklenmedik şekilde kilitlenmesine 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.
(Bunlar, derleme işlemini yürüten 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 söz konusu anahtarın değerini yazdırır. (Bu, özellikle Bazel'de komut dosyası oluştururken kullanışlıdır. Sonucun sed -ne /key:/s/key://p
üzerinden yönlendirilmesine gerek kalmaz:
Yapılandırmadan bağımsız veriler
release
: Bu Bazel örneğinin yayın etiketi veya yayınlanmış bir ikili dosya değilse "geliştirme sürümü".workspace
Temel çalışma alanı dizininin tam yolu.install_base
: Bu Bazel örneği tarafından geçerli kullanıcı için kullanılan yükleme dizininin mutlak yolu. Bazel, dahili olarak gerekli yürütülebilir dosyalarını bu dizinin altına yükler.output_base
: Geçerli 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 geçici ve derleme çıkışını bu dizinin altına yerleştirir.execution_root
: output_base altındaki yürütme kök dizininin tam yolu. Bu dizin, derleme sırasında yürütülen komutlarla erişilebilen tüm dosyaların köküdür ve bu komutların çalışma dizinidir. Çalışma alanı dizini yazılabilirse bu dizine işaret edenbazel-<workspace>
adlı bir sembolik bağlantı buraya yerleştirilir.output_path
: Tüm dosyalar için kullanılan yürütme kökünün altındaki çıkış dizininin mutlak yolu. Bu dosyalar, derleme komutları sonucunda oluşturulur. Çalışma alanı dizini yazılabilirse bu dizine işaret edenbazel-out
adlı bir sembolik bağlantı buraya yerleştirilir.server_pid
: Bazel sunucusu işleminin işlem kimliği.server_log
: Bazel sunucusunun hata ayıklama günlük dosyasına giden mutlak yol. Bu dosya, Bazel sunucusunun kullanım ömrü boyunca tüm komutlarla ilgili hata ayıklama bilgilerini içerir ve Bazel geliştiricileri ile ileri düzey kullanıcılar tarafından okunmak üzere tasarlanmıştır.command_log
: Komut günlük dosyasının mutlak yolu; bu dosya, en son Bazel komutunun araya yerleştirilmiş stdout ve stderr akışlarını içerir.bazel info
komutunun çalıştırılması, en son Bazel komutu olacağından bu dosyanın içeriğinin üzerine yazılacağını unutmayın. Ancak--output_base
veya--output_user_root
seçeneklerinin ayarını değiştirmediğiniz sürece komut günlük dosyasının konumu değişmez.used-heap-size
,committed-heap-size
,max-heap-size
: Çeşitli JVM yığın boyutu parametrelerini bildirir. Sırasıyla: Şu anda kullanılan bellek, sistemden JVM'ye şu anda kullanılabilir olması garanti edilen bellek, olası maksimum ayırma.gc-count
,gc-time
: Bu Bazel sunucusunun başlangıcından beri yapılan çöp toplama işlemlerinin toplam 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 paketlerin aranacağı, iki nokta üst üste ile ayrılmış yollar listesi.--package_path
derleme komut satırı bağımsız değişkeniyle aynı biçime sahiptir.
Örnek: Bazel sunucusunun işlem kimliği.
% bazel info server_pid 1285
Yapılandırmaya özel veriler
Bu veriler, bazel info
'ya 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 derlemenin ardından temel çalışma alanı dizininde oluşturulanbazel-*
sembolik bağlantılarıyla aynıdır. Ancak çalışma alanı dizini salt okunursabazel-*
sembolik bağlantıları oluşturulamaz. Sembolik bağlantının varlığını varsaymak yerinebazel info
tarafından bildirilen değeri kullanan komut dosyaları daha sağlam olacaktır.- Tam "Make" ortamı.
--show_make_env
işareti belirtilmişse mevcut yapılandırmanın "Make" ortamındaki tüm değişkenler de gösterilir (ör.CC
,GLIBC_VERSION
vb.). Bunlar, BUILD dosyalarında$(CC)
veyavarref("CC")
söz dizimi kullanılarak erişilen değişkenlerdir.
Örnek: Geçerli 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. Bu, bazel-bin
sembolik bağlantısının bazı nedenlerle (ör. salt okunur bir dizinden derleme yapıyorsanız) oluşturulamadığı durumlarda bile doğru olur.
% bazel info --cpu=piii bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin % bazel info --cpu=k8 bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin
version
ve --version
Sürüm komutu, oluşturulan Bazel ikilisiyle ilgili sürüm ayrıntılarını (oluşturulduğu 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 hataları bildirmek için yararlıdır. İlginç değerlerden bazıları şunlardır:
changelist
: Bu Bazel sürümünün yayınlandığı değişiklik listesi.label
: Bu Bazel örneğinin yayın etiketi veya yayınlanmış bir ikili dosya değilse "geliştirme sürümü". Hata bildirirken çok faydalıdır.
Başka bağımsız değişken içermeyen bazel --version
, bazel version --gnu_format
ile aynı çıkışı verir. Ancak Bazel sunucusunu başlatma veya sunucu arşivini açma gibi bir yan etkisi yoktur. bazel --version
, çalışma alanı dizini gerektirmediği için her yerden çalıştırılabilir.
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 bölümüne bakın.
Aşağıdaki seçenekler desteklenir:
--incremental
Ayarlanırsa Bazel, uygulamayı artımlı olarak yüklemeye çalışır. Yani yalnızca son derlemeden bu yana değişen kısımları yükler. Bu, AndroidManifest.xml
, yerel kod veya Java kaynaklarından (ör. Class.getResource()
tarafından referans verilenler) 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 yapılması gerektiğini bilmek kullanıcının sorumluluğundadır.
Marshmallow veya sonraki bir sürümün yüklü olduğu bir cihaz kullanıyorsanız --split_apks
işaretini göz önünde bulundurun.
--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
Yüklendikten sonra uygulamayı temiz bir durumda başlatır. --start=COLD
etiketine eş değer.
--debug_app
Uygulamayı yükledikten sonra temiz durumda başlatmadan önce hata ayıklayıcının eklenmesini bekler.
--start=DEBUG
etiketine eş değer.
--start=_start_type_
Uygulama, yüklendikten sonra nasıl başlatılmalıdır? Desteklenen _start_type_lar şunlardır:
NO
Uygulamayı başlatmaz. Bu, varsayılan ayardır.COLD
Uygulamayı yükledikten sonra temiz bir durumdan başlatır.WARM
Artımlı yüklemelerde uygulama durumunu korur ve geri yükler.DEBUG
Uygulamayı yükledikten sonra temiz bir durumda başlatmadan önce hata ayıklayıcıyı bekler.
--adb=path
Kullanılacak adb
ikilisini gösterir.
Varsayılan olarak, --android_sdk
ile belirtilen Android SDK'sındaki adb kullanılır.
--adb_arg=serial
adb
için fazladan bağımsız değişkenler. Bunlar komut satırında alt komuttan önce gelir ve genellikle hangi cihaza yükleneceğini belirtmek için kullanılır.
Örneğin, kullanılacak Android cihazı veya emülatörü seçmek için:
% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef
adb
komutunu şu şekilde çağırır:
adb -s deadbeef install ...
--incremental_install_verbosity=number
Artımlı yükleme için ayrıntı düzeyi. Hata ayıklama günlüklerinin konsola yazdırılması için 1 olarak ayarlayın.
dump
dump
komutu, Bazel sunucusunun dahili durumunun dökümünü stdout'a yazdırır. Bu komut, öncelikle Bazel geliştiricileri tarafından kullanılmak üzere tasarlanmıştır. Bu nedenle, bu komutun çıkışı belirtilmez ve değişebilir.
Varsayılan olarak, komut yalnızca Bazel durumunun belirli alanlarını boşaltmak için olası seçenekleri özetleyen yardım mesajını yazdırır. Dahili durumu boşaltmak için seçeneklerden en az biri belirtilmelidir.
Aşağıdaki seçenekler desteklenir:
--action_cache
, işlem önbelleği içeriğini boşaltır.--packages
paket önbelleği içeriğini boşaltır.--skyframe
, dahili Bazel bağımlılık grafiğinin durumunu boşaltır.--rules
Her kural ve yön sınıfı için kural özetini (sayılar ve işlem sayıları dahil) boşaltır. Buna hem yerel hem de Starlark kuralları dahildir. Bellek izleme etkinse kuralların bellek tüketimi de yazdırılır.--skylark_memory
, belirtilen yola pprof ile uyumlu bir .gz dosyası bırakır. Bu özelliğin çalışması için bellek izlemeyi etkinleştirmeniz gerekir.
Bellek izleme
Bazı dump
komutları için bellek izleme gerekir. 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.4.jar
--host_jvm_args=-DRULE_MEMORY_TRACKER=1
Java aracısı, third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.jar
konumunda Bazel'e kaydedilir. Bu nedenle, Bazel deponuzu nerede sakladığınıza göre $BAZEL
değerini ayarladığınızdan emin olun.
Her komut için bu seçenekleri Bazel'e iletmeye devam etmeyi unutmayın. Aksi takdirde sunucu yeniden başlatılır.
Örnek:
% bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.4.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.4.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.4.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --skylark_memory=$HOME/prof.gz % pprof -flame $HOME/prof.gz
analyze-profile
analyze-profile
komutu, daha önce bir Bazel çağrısı sırasında toplanan JSON izleme profilini analiz eder.
canonicalize-flags
Bir Bazel komutu için seçenek listesi alan ve aynı etkiye sahip seçeneklerin listesini döndüren canonicalize-flags
komutu. Yeni seçenek listesi kanonik olmalıdır. Örneğin, aynı etkiye sahip iki seçenek listesi aynı yeni listede 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. Belirtilen 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 tüm sonraki komutlar için geçerlidir. Zaten ç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ına listelemek için startup --key=value
kullanın.
--output_base=dir
Bu seçenek için yazılabilir bir dizini belirtmesi gereken bir yol bağımsız değişkeni gerekir. 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şleyecek sunucuyu değiştirirsiniz.
Varsayılan olarak, çıkış tabanı kullanıcının giriş adından ve çalışma alanı dizininin adından (aslında MD5 özeti) türetilir. Bu nedenle, tipik bir değer şu şekilde görünür:
/var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e
.
Örneğin:
OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base % bazel --output_base ${OUTPUT_BASE}1 build //foo & bazel --output_base ${OUTPUT_BASE}2 build //bar
Bu komutta, iki Bazel komutu eşzamanlı olarak çalışır (kabuk &
operatörü nedeniyle). Her biri farklı bir Bazel sunucu örneği kullanır (farklı çıkış tabanları nedeniyle).
Buna karşılık, her iki komutta da varsayılan çıkış tabanı kullanılsaydı her iki istek de aynı sunucuya gönderilir ve bu sunucu istekleri sırayla işlerdi: önce //foo
oluşturulur, ardından //bar
'nin artımlı derlemesi yapılır.
--output_user_root=dir
Çıkış ve yükleme tabanlarının oluşturulduğu kök dizini gösterir. Dizin mevcut olmamalı veya arayan kullanıcıya ait olmalıdır. Geçmişte, bu özelliğin çeşitli kullanıcılar arasında paylaşılan bir dizine işaret etmesine izin veriliyordu ancak artık izin verilmiyor. Bu işlem, 11100 numaralı sorun çözüldükten sonra bir kez yapılabilir.
--output_base
seçeneği belirtilirse çıktı tabanını hesaplamak için --output_user_root
kullanma işlemi geçersiz kılınır.
Yükleme tabanı konumu, --output_user_root
ve Bazel'e yerleştirilmiş ikili dosyaların MD5 kimliği kullanılarak 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 dizinin yolu olmalıdır. Etiket olmamalıdır. Bu seçenek, herhangi bir Bazel komutundan önce görünmelidir. Örneğin:
% bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo
Bu işaret, uygulamalar, testler ve araçlar gibi Bazel alt işlemleri tarafından kullanılan JVM'leri etkilemez. Bunun yerine --javabase veya --host_javabase derleme seçeneklerini kullanın.
Bu işaret daha önce --host_javabase
(bazen "sol taraf" --host_javabase
olarak da adlandırılır) olarak adlandırılıyordu ancak --host_javabase derleme işaretiyle (bazen "sağ taraf" --host_javabase
olarak da adlandırılır) karışıklığı önlemek için yeniden adlandırıldı.
--host_jvm_args=string
Bazel'in kendisinin çalıştığı Java sanal makinesine iletilecek bir başlatma seçeneğini belirtir. Bu, yığın boyutunu ayarlamak için kullanılabilir. Örneğin:
% bazel --host_jvm_args="-Xss256K" build //foo
Bu seçenek, bağımsız değişkenlerle birden fazla kez kullanılabilir. Bu işaretin nadiren ayarlanması gerektiğini unutmayın. Ayrıca, her biri ayrı bir JVM bağımsız değişkeni olarak yorumlanacak olan, boşlukla ayrılmış bir dizeler listesi de iletebilirsiniz. Ancak bu özellik yakında kullanımdan kaldırılacak.
Bu durumun, Bazel'in alt işlemleri (uygulamalar, testler, araçlar vb.) tarafından kullanılan JVM'leri etkilemediğini. bazel
run
tarafından veya komut satırında çalıştırılan yürütülebilir Java programlarına JVM seçeneklerini aktarmak 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 ...
kullanın.
--host_jvm_debug
Bu seçenek, Java sanal makinesinin Bazel'in kendisinin ana yöntemini çağırmadan önce JDWP uyumlu bir hata ayıklayıcıdan bağlantı beklemesine neden olur. Bu özellik öncelikli olarak Bazel geliştiricileri tarafından kullanılmak üzere tasarlanmıştır.
etkilemez.--autodetect_server_javabase
Bu seçenek, Bazel'in başlatma sırasında yüklü bir JDK'yı otomatik olarak aramasını ve yerleştirilmiş JRE kullanılamıyorsa yüklü JRE'ye geri dönmesini sağlar.
--explicit_server_javabase
, Bazel'in çalıştırılacağı açık bir JRE seçmek için kullanılabilir.
--batch
Toplu iş modu, Bazel'in standart istemci/sunucu modunu kullanmamasına neden olur. Bunun yerine, sinyal işleme, iş kontrolü ve ortam değişkeni devralma ile ilgili daha öngörülebilir semantik için kullanılan ve Bazel'i chroot jail'de çalıştırmak için gerekli olan tek bir komut için bir Bazel Java işlemi çalıştırır.
Toplu iş modu, aynı output_base içinde uygun sıralama semantiğini korur. Yani eşzamanlı çağırmalar, çakışma olmadan sırayla işlenir. Çalışan bir sunucusu olan istemcide toplu modda Bazel çalıştırılırsa komutu işlemeden önce sunucuyu sonlandırır.
Bazel, toplu modda veya yukarıda açıklanan alternatiflerle daha yavaş çalışır. Bunun nedeni, diğer nedenlerin yanı sıra derleme dosyası önbelleğinin bellekte yerleşik olmasıdır. Bu nedenle, sıralı toplu çağırmalar arasında korunmaz. Bu nedenle, toplu modun kullanılması genellikle performansın daha az kritik olduğu durumlarda (ör. sürekli derlemeler) daha mantıklıdır.
--max_idle_secs=n
Bu seçenek, Bazel sunucu işleminin son istemci isteğinden sonra çıkmadan önce kaç saniye beklemesi gerektiğini belirtir. Varsayılan değer 10.800'dür (3 saat). --max_idle_secs=0
, Bazel sunucu işleminin süresiz olarak devam etmesine neden olur.
Bu seçenek, Bazel'i çağıran komut dosyaları tarafından, aksi takdirde çalışmayacakları zamanlarda kullanıcının makinesinde Bazel sunucu işlemlerini bırakmamalarını sağlamak için kullanılabilir.
Örneğin, bir ön gönderme komut dosyası, kullanıcının bekleyen değişikliğinin istenmeyen bağımlılıklar oluşturmadığından emin olmak için bazel query
işlevini çağırmak isteyebilir. Ancak kullanıcı, söz konusu çalışma alanında son zamanlarda derleme yapmadıysa ön gönderme komut dosyasının, günün geri kalanında boşta kalacak bir Bazel sunucusu başlatması istenmez.
Sorgu isteğinde --max_idle_secs
için küçük bir değer belirterek komut dosyası, yeni bir sunucunun başlatılmasına neden olduysa bu sunucunun hemen çıkmasını, ancak bunun yerine zaten çalışan bir sunucu varsa bu sunucunun normal süre boyunca boşta kalana kadar çalışmaya devam etmesini sağlayabilir. Elbette, mevcut sunucunun boşta kalma 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 sistemin belleği azaldığında sunucuyu kapatın. Yalnızca Linux
Derleme sunucusu, max_idle_secs'e 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 azalırsa sunucu çıkar.
--[no]block_for_lock
Etkinleştirilirse Bazel, ilerlemeden önce sunucu kilidini tutan diğer Bazel komutlarının tamamlanmasını bekler. Devre dışı bırakılırsa Bazel, kilidi hemen alamayıp devam edemezse hatayla çıkar.
Geliştiriciler, aynı istemcideki başka bir Bazel komutunun neden olduğu uzun beklemeleri önlemek için bu özelliği gönderme öncesi kontrollerde kullanabilir.
--io_nice_level=n
En iyi girişim temel alınarak G/Ç planlaması için 0-7 arasında bir düzey ayarlar. 0 en yüksek, 7 en düşük önceliği ifade eder. Önceden planlama özelliği yalnızca 4. önceliğe kadar olan görevleri işleyebilir. Negatif değerler yoksayılır.
--batch_cpu_scheduling
Bazel için batch
CPU zamanlamasını kullanın. Bu politika, etkileşimli olmayan ancak öncelik değerini düşürmek istemeyen iş yükleri için yararlıdır.
"man 2 sched_setscheduler" komutuna bakın. Bu politika, Bazel işleme hızı pahasına daha iyi sistem etkileşimi sağlayabilir.
Çeşitli seçenekler
--[no]announce_rc
Başlatılırken Bazel'in başlangıç seçeneklerini ve bazelrc dosyalarından okunan komut seçeneklerini duyurup duyurmayacağını kontrol eder.
--color (yes|no|auto)
Bu seçenek, Bazel'ın ekrandaki çıkışını vurgulamak için renk kullanıp kullanmayacağını belirler.
Bu seçenek yes
olarak ayarlanırsa renkli çıktı etkinleştirilir.
Bu seçenek auto
olarak ayarlanırsa Bazel, yalnızca çıkış 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 gidip gitmediğine ve TERM ortam değişkeninin ayarına bakılmaksızın renk çıkışı devre dışı bırakılır.
--config=name
rc dosyalarından ek yapılandırma bölümü seçer; geçerli command
için böyle bir bölüm varsa command:name
'deki seçenekleri de alır. Birden fazla yapılandırma bölümünden işaret eklemek için birden çok kez belirtilebilir. Genişletmeler, diğer tanımlara (ör. genişletmeler zincirlenebilir) atıfta bulunabilir.
--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 verisi ve Bazel'den daha kompakt ve okunması kolay bir çıktı akışı elde edilir. Bu özellik, --color
ile iyi çalışır.
Bu seçenek yes
olarak ayarlanırsa imleç kontrollerinin kullanılmasına izin verilir.
Bu seçenek no
olarak ayarlanırsa imleç denetimlerinin kullanımı devre dışı bırakılır.
Bu seçenek auto
olarak ayarlanırsa imleç kontrollerinin kullanımı, --color=auto
ile aynı koşullarda etkinleştirilir.
--[no]show_timestamps
Belirtilirse Bazel tarafından oluşturulan her iletiye, iletinin gösterildiği zamanı belirten bir zaman damgası eklenir.