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 tamamlayıcıdır
komutunu Bazel ile derleme bölümünde Bazel'ın komutları listesine ekleyeceğiz.
Hedef söz dizimi
build
veya test
gibi bazı komutlar bir hedef listesinde çalışabilir. Etiketlerden daha esnek bir söz dizimi kullanırlar. Bu söz dizimi, Oluşturulacak hedefleri belirtme bölümünde açıklanmıştır.
Seçenekler
Aşağıdaki bölümlerde derleme sırasında kullanılabilen seçenekler açıklanmaktadır. Bir yardım komutunda --long
kullanıldığında, online yardım mesajları her bir seçeneğin anlamı, türü ve varsayılan değeri hakkında özet bilgiler sağlar.
Çoğu seçenek yalnızca bir kez belirtilebilir. Birden çok kez belirtildiğinde son örnek kazanır. Birden çok kez belirtilebilecek seçenekler, online yardımda "birden çok kez kullanılabilir" ifadesiyle belirtilir.
Paket konumu
--package_path
UYARI: --package_path
seçeneğinin desteği sonlandırılmıştır. Bazel, ana depoda bulunan paketlerin Workspace kökünün altında olmasını tercih eder.
Bu seçenek, belirli bir paketin BUILD dosyasını bulmak için aranan dizin grubunu belirtir.
Bazel, paket yolunda arama yaparak paketlerini bulur. Bu, her biri kısmi bir kaynak ağacının kökü olan bazel dizinlerinin iki nokta işareti ile ayrılmış sıralı bir listesidir.
--package_path
seçeneğini kullanarak özel bir paket yolu belirtmek için:
% bazel build --package_path %workspace%:/some/other/root
Paket yolu öğeleri üç biçimde belirtilebilir:
- İlk karakter
/
ise yol mutlaktır. - Yol
%workspace%
ile başlıyorsa en yakın kapsayıcı bazel dizine göre alınır. Örneğin, çalışma dizininiz/home/bob/clients/bob_client/bazel/foo
ise package-path parametresindeki%workspace%
dizesi/home/bob/clients/bob_client/bazel
olarak genişletilir. - Diğer tüm değerler çalışma dizinine göre alınır.
Genellikle bunu yapmak istemezsiniz ve Bazel'i bazel çalışma alanının altındaki dizinlerden kullanırsanız beklenmedik şekilde davranabilir.
Örneğin paket yolu öğesini
.
kullanırsanız ve sonra cd'yi kullanarak dizine/home/bob/clients/bob_client/bazel/foo
, paketler/home/bob/clients/bob_client/bazel/foo
dizini.
Varsayılan olmayan bir paket yolu kullanıyorsanız kolaylık sağlamak için Bazel yapılandırma dosyanızda belirtin.
Bazel, herhangi bir paketin geçerli dizin oluşturun, böylece boş bir bazel'dan derleme yapabilirsiniz gerekli tüm paketler başka bir yerde bulunabiliyorsa Workspace belirtir.
Örnek: Boş bir istemciden derleme
% 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 ve paket yolundaki herhangi bir dizinden yükleme denemesi yapmaması gereken paketlerin virgülle ayrılmış bir listesini belirtir. Bu kod, silinmeyen paketlerin silinmesini simüle etmek için kullanılabilir. silmelerini sağlayabilirsiniz. Bu seçenek birden çok kez iletilebilir. Bu durumda ayrı 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ış değerine ayarlanırsa görünürlük kontrolleri uyarı olarak düşürülür. Bu seçeneğin varsayılan değeri true olduğundan varsayılan olarak görünürlük kontrolü yapılır.
--output_filter=regex
--output_filter
seçeneği yalnızca normal ifadeyle eşleşen hedefler için derleme ve derleme uyarılarını gösterir. Bir hedef
verilen normal ifadeyle eşleşir ve yürütme başarılı olursa standart
çıktı ve standart hata silinir.
Aşağıda bu seçenek için bazı tipik değerler verilmiştir:
`--output_filter='^//(first/project|second/project):'` | Belirtilen paketlerin çıkışını gösterir. |
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` | Belirtilen paketlerin çıkışını göstermez. |
`--output_filter=` | Her şeyi göster. |
`--output_filter=DONT_MATCH_ANYTHING` | Hiçbir şey gösterme. |
Araç işaretleri
Bu seçenekler, Bazel'in diğer araçlara hangi seçenekleri ileteceğini kontrol eder.
--copt=cc-option
Bu seçenek, derleyiciye iletilecek bir bağımsız değişken alır. C, C++ veya derleyici kodunu ön işleme, derleme ve/veya derleme için her çağrıldığında bağımsız değişken derleyiciye iletilir. Bağlantı oluşturma işlemi sırasında iletilmez.
Bu seçenek birden çok kez kullanılabilir. Örneğin:
% bazel build --copt="-g0" --copt="-fpic" //foo
foo
kitaplığını hata ayıklama tabloları olmadan derleyerek konuma bağımlı olmayan kod oluşturur.
--host_copt=cc-option
Bu seçenek, exec yapılandırmasında derlenen kaynak dosyalar için derleyiciye iletilecek bir bağımsız değişken alır. Bu,
--copt
seçeneği kullanılabilir, ancak yalnızca
exec konfigürasyonunu kullanabilirsiniz.
--host_conlyopt=cc-option
Bu seçenek, C kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişkeni alır
exec yapılandırmasında derlenen komut dosyalarıdır. Bu,
--conlyopt
seçeneği geçerlidir, ancak yalnızca geçerlidir
yapılandırmaya çalışın.
--host_cxxopt=cc-option
Bu seçenek, C++ kaynak dosyaları için derleyiciye iletilecek bir bağımsız değişkeni alır
exec yapılandırmasında derlenen komut dosyalarıdır. Bu, --cxxopt
seçeneğine benzer ancak yalnızca yürütücü yapılandırması için geçerlidir.
--host_linkopt=linker-option
Bu seçenek, exec yapılandırmasında derlenen kaynak dosyalar için bağlayıcıya iletilecek bir bağımsız değişken alır. Bu,
--linkopt
seçeneği sunulur, ancak yalnızca
yapılandırma dosyasıdır.
--conlyopt=cc-option
Bu seçenek, C kaynak dosyaları derlenirken derleyiciye iletilecek bir bağımsız değişkeni alır.
Bu, --copt
'e benzer ancak yalnızca C derlemesi için geçerlidir, C++ derlemesi veya bağlama için geçerli değildir. Bu nedenle, --conlyopt
kullanarak C'ye özgü seçenekleri (-Wno-pointer-sign
gibi) iletebilirsiniz.
--cxxopt=cc-option
Bu seçenek, aşağıdaki durumlarda derleyiciye iletilecek bir bağımsız değişkeni alır: C++ kaynak dosyalarını derleme.
Bu --copt
işlevine benzer ancak yalnızca C++ derlemesi için geçerlidir.
bağlantı oluşturmayın. Böylece C++'a özgü seçenekleri iletebilirsiniz.
--cxxopt
kullanarak (-fpermissive
veya -fno-implicit-templates
gibi).
Örneğin:
% bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code
--linkopt=linker-option
Bu seçenek, bağlantı oluşturma sırasında derleyiciye iletilecek bir bağımsız değişkeni alır.
Bu, --copt
'e benzer ancak yalnızca bağlantı oluşturma için geçerlidir, derleme için geçerli değildir. Bu nedenle, yalnızca bağlantı sırasında anlamlı olan derleyici seçeneklerini (-lssp
veya -Wl,--wrap,abort
gibi) --linkopt
kullanarak iletebilirsiniz. Örneğin:
% bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code
Derleme kuralları, özelliklerinde bağlantı seçeneklerini de belirtebilir. Bu seçeneğin ayarları her zaman önceliklidir. Şunlara da bakabilirsiniz: cc_library.linkopts gibi bir sorguyla sona ermediğini unutmayın.
--strip (always|never|sometimes)
Bu seçenek, Bazel'in
tüm ikili programlar ve paylaşılan kitaplıklar için bağlayıcıyı -Wl,--strip-debug
seçeneğiyle çağırın.
--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ılmayacağı anlamına gelir.
--strip=sometimes
değerinin varsayılan değeri, --compilation_mode
fastbuild
ise sarmalama anlamına gelir.
% bazel build --strip=always //foo:bar
hedefi derler ve oluşturulan tüm öğelerden hata ayıklama bilgilerini ayıklar her zaman daha iyidir.
Bazel'in --strip
seçeneği, ld'nin --strip-debug
seçeneğine karşılık gelir: Yalnızca hata ayıklama bilgilerini kaldırır. Herhangi bir nedenle yalnızca hata ayıklama simgelerini değil, tüm simgeleri kaldırmak istiyorsanız ld'nin --strip-all
seçeneğini kullanmanız gerekir. Bunu yapmak için --linkopt=-Wl,--strip-all
değerini Bazel'e iletebilirsiniz. Ayrıca Bazel'in --strip
işaretini ayarladığınızda --linkopt=-Wl,--strip-all
işaretinin geçersiz kılınacağını unutmayın. Bu nedenle, yalnızca birini ayarlamanız gerekir.
Yalnızca tek bir ikili dosya oluşturuyorsanız ve tüm sembollerin kaldırılmasını istiyorsanız --stripopt=--strip-all
parametresini iletebilir ve hedefin //foo:bar.stripped
sürümünü açıkça derleyebilirsiniz. --stripopt
bölümünde açıklandığı gibi, bu işlem, stripping işlemini derlemenin tüm bağlantı işlemlerine dahil etmek yerine nihai ikili bağlandıktan sonra bir stripping işlemi uygular.
--stripopt=strip-option
Bu,strip
*.stripped
ikili programı. Varsayılan değer -S -p
'tir. Bu seçenek birden çok kez kullanılabilir.
--fdo_instrument=profile-output-dir
--fdo_instrument
seçeneği, derlenmiş C/C++ ikili dosyası yürütüldüğünde FDO (geri bildirime dayalı optimizasyon) profil çıktısının oluşturulmasını sağlar. GCC için, sağlanan bağımsız değişken
.gcda dosyalarından oluşan nesne başına dosya dizini ağacının dizin öneki
her .o dosyası için profil bilgilerini içeren bir dosyayı yükleyin.
Profil veri ağacı oluşturulduktan sonra, FDO'ya göre optimize edilmiş derlemeyi etkinleştirmek için profil ağacı sıkıştırılmalı ve --fdo_optimize=profile-zip
Bazel seçeneğine sağlanmalıdır.
LLVM derleyicisi için bu bağımsız değişken, ham LLVM profil veri dosyalarının döküldüğü dizindir. Örneğin:
--fdo_instrument=/path/to/rawprof/dir/
.
--fdo_instrument
ve --fdo_optimize
seçenekleri aynı anda kullanılamaz.
--fdo_optimize=profile-zip
--fdo_optimize
seçeneği, derleme sırasında FDO (geri bildirim odaklı optimizasyon) optimizasyonları gerçekleştirmek için nesne başına dosya profili bilgilerinin kullanılmasını sağlar. GCC için sağlanan bağımsız değişken, her .o dosyası için profil bilgilerini içeren .gcda dosyalarının önceden oluşturulmuş dosya ağacını içeren zip dosyasıdır.
Alternatif olarak, sağlanan bağımsız değişken bir otomatik profili işaret edebilir .afdo uzantısıyla tanımlanır.
LLVM derleyicisi için sağlanan bağımsız değişken, llvm-profdata aracı tarafından hazırlanan dizine eklenen LLVM profil çıkış dosyasını işaret etmeli ve .profdata uzantısına sahip olmalıdır.
--fdo_instrument
ve --fdo_optimize
seçenekleri aynı anda kullanılamaz.
--java_language_version=version
Bu seçenek Java kaynaklarının sürümünü belirtir. Örneğin:
% bazel build --java_language_version=8 java/com/example/common/foo:all
derleyip yalnızca Java 8 spesifikasyonuyla uyumlu yapılara izin verir.
Varsayılan değer 8'dir. -->
Olası değerler: 8, 9, 10, 11, 14, 15 ve 21 ve şu şekilde genişletilebilir:
default_java_toolchain
kullanarak özel Java araç zincirleri kaydetme.
--tool_java_language_version=version
Derleme sırasında yürütülen araçlar oluşturmak için kullanılan Java dili sürümü. Varsayılan değer 8'dir.
--java_runtime_version=version
Bu seçenek, kodu yürütmek ve testleri çalıştırmak için kullanılacak JVM sürümünü belirtir. Örneğin:
% bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application
bir uzak depodan JDK 11'i indirir ve onu kullanarak Java uygulamasını çalıştırır.
local_jdk
varsayılan değerdir.
Olası değerler: local_jdk
, local_jdk_version
,
remotejdk_11
ve remotejdk_17
.
local_java_repository
veya remote_java_repository
depolama alanı kurallarını kullanarak özel JVM kaydederek değerleri genişletebilirsiniz.
--tool_java_runtime_version=version
Derleme sırasında ihtiyaç duyulan araçları çalıştırmak için kullanılan JVM sürümü.
Varsayılan değer remotejdk_11
'tür.
--jvmopt=jvm-option
Bu seçenek, seçenek bağımsız değişkenlerinin Java sanal makinesine aktarılmasına izin verir. Kullanılabilir veya bağımsız argümanlarla birden çok kez yapabilirsiniz. Örneğin:
% bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all
tüm Java ikililerini başlatmak için sunucu sanal makinesini kullanır ve başlangıç yığını boyutunu 256 MB'a çıkarın.
--javacopt=javac-option
Bu seçenek, seçenek bağımsız değişkenlerinin javac'a iletilmesine olanak tanır. Kullanılabilir veya bağımsız argümanlarla birden çok kez yapabilirsiniz. Örneğin:
% bazel build --javacopt="-g:source,lines" //myprojects:prog
bir java_binary dosyasını, javac varsayılan hata ayıklama bilgileriyle yeniden oluşturur (bazel varsayılanı yerine).
Seçenek, Bazel'in yerleşik varsayılan seçeneklerinden sonra javac'a javac kodunu ekleyin. javac için herhangi bir seçeneğin son spesifikasyonu kazanır. javac için varsayılan seçenekler şunlardır:
-source 8 -target 8 -encoding UTF-8.
--strict_java_deps (default|strict|off|warn|error)
Bu seçenek, Javac'nin eksik doğrudan bağımlılıkları kontrol edip etmediğini kontrol eder. Java hedefleri, doğrudan kullanılan tüm hedefleri bağımlılık olarak açıkça belirtmelidir. Bu işaret, javac'ya gerçekten kullanılan jar'ları belirlemesi için talimat verir her Java dosyasını kontrol etmek için tür ve çıktı değilse uyar/hata doğrudan bağlılığından kaynaklanır.
off
, kontrolün devre dışı olduğu anlamına gelir.warn
, javac'nin şunun standart Java uyarılarını oluşturacağı anlamına gelir: doğrudan bağımlılığı olmayan her biri için[strict]
yazın.default
,strict
veerror
seçeneklerinin tümü, javac'ın uyarı yerine hata oluşturacağı anlamına gelir. Bu da, eksik doğrudan bağımlılık bulunursa geçerli hedefin derlenmesinin başarısız olmasına neden olur. Bu, işaret belirtilmediğinde de varsayılan davranıştır.
Anlamsal yapı oluşturma
Bu seçenekler derleme komutlarını ve/veya çıkış dosyası içeriklerini etkiler.
--compilation_mode (fastbuild|opt|dbg)
(-c)
--compilation_mode
seçeneği (genellikle -c
veya özellikle -c opt
olarak kısaltılır), fastbuild
, dbg
veya opt
bağımsız değişkeni alır ve optimizasyon düzeyi ve hata ayıklama tablolarının eksiksizliği gibi çeşitli C/C++ kod oluşturma seçeneklerini etkiler. Bazel her biri için farklı bir çıkış dizini kullanır
Böylece, derlemeye ihtiyaç duymadan modlar arasında geçiş yapabilirsiniz.
her seferinde tamamen yeniden oluşturma işlemi yapması gerekiyor.
fastbuild
, mümkün olduğunca hızlı derleme anlamına gelir: minimum hata ayıklama bilgisi oluşturun (-gmlt -Wl,-S
) ve optimize etmeyin. Bu varsayılan ayardır. Not:-DNDEBUG
ayarlanmaz.dbg
, hata ayıklamanın etkin olduğu derleme anlamına gelir (-g
), Böylece gdb (veya başka bir hata ayıklayıcıyı) kullanabilirsiniz.opt
, optimizasyon etkinleştirilmiş ve (-O2 -DNDEBUG
)assert()
çağrıyla devre dışı bırakıldı.opt
modunda hata ayıklama bilgileri oluşturulmaz--copt -g
testini geçemezseniz.
--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
veya değeri name=value
çağrı ortamı.
Bu --action_env
işareti birden çok kez belirtilebilir. Birden fazla --action_env
işaretinde aynı değişkene bir değer atanırsa en son atama kazanır.
--experimental_action_listener=label
experimental_action_listener
seçeneği, Bazel'e extra_actions
'yi derleme grafiğine eklemek için label tarafından belirtilen action_listener
kuralındaki ayrıntıları kullanmasını söyler.
--[no]experimental_extra_action_top_level_only
Bu seçenek doğru değerine ayarlanırsa
--experimental_action_listener
komutu
çizgi seçeneği yalnızca üst düzey hedefler için planlanacaktır.
--experimental_extra_action_filter=regex
experimental_extra_action_filter
seçeneği, Bazel'e extra_actions
için planlanacak hedef grubunu filtrelemesini söyler.
Bu işaret yalnızca --experimental_action_listener
işaretiyle birlikte kullanılabilir.
Varsayılan olarakextra_actions
istenen hedeflerin yürütülmesi planlandı.
--experimental_extra_action_filter
, planlama işlemini şununla sınırlayacak:
Sahip etiketinin belirtilenle eşleştiği extra_actions
normal ifadeye benzer.
Aşağıdaki örnek, extra_actions
tarihli planlamayı sınırlandırır
yalnızca sahibin etiketinde '/bar/' bulunan işlemlere uygulanacak:
% bazel build --experimental_action_listener=//test:al //foo/... \ --experimental_extra_action_filter=.*/bar/.*
--host_cpu=cpu
Bu seçenek, kullanılması gereken CPU mimarisinin adını barındırma araçları oluşturmak için kullanılır.
--android_platforms=platform[,platform]*
Geçişli deps
derlenecek platformlar:
android_binary
kuralları (özellikle C++ gibi yerel bağımlılıklar için). Örneğin,
Örneğin cc_library
, bir anahtarın geçişli deps
içinde
android_binary
kuralı, belirtilen her platform için bir kez oluşturulur.
android_binary
kuralı için --android_platforms
ve son kurala dahil edildi
çıktı.
Bu işaret için varsayılan bir değer yoktur: Özel bir Android platformu tanımlanıp kullanılmalıdır.
--android_platforms
ile belirtilen her platform için bir .so
dosyası oluşturulur ve APK'ya paketlenir. .so
dosyasının adı,
"lib" içeren android_binary
kural. Örneğin, android_binary
dosyasının adı "foo" ise dosya libfoo.so
olur.
--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...
Mevcut olduğunda, dahil etme normal ifadesinden biriyle eşleşen etikete veya yürütme yoluna sahip herhangi bir C++ dosyası
dışlama ifadelerinin hiçbiriyle eşleşmeyen ifadeler oluşturulur
tercih edebilirsiniz. Etiket eşleştirme, etiketin standart biçimini kullanır (ör. //package
:label_name
).
Yürütme yolu, temel adı da içeren Workspace dizininizin göreli yoludur (uzantı dahil) C++ dosyasının otomatik olarak oynatılmasını sağlar. Ayrıca, platforma bağlı tüm ön ekleri de içerir.
Bazel, oluşturulan dosyalarla (ör. genrule çıkışları) eşleştirme yapmak için yalnızca yürütme yolunu kullanabilir. Bu durumda normal ifade, herhangi bir yürütme yoluyla eşleşmediğinden "//" ile başlamamalıdır. Paket adları şu şekilde kullanılabilir:
--per_file_copt=base/.*\.pb\.cc@-g0
Bu, şunlarla eşleşecek:
base
adlı dizinde .pb.cc
dosyası oluşturun.
Bu seçenek birden çok kez kullanılabilir.
Seçenek, kullanılan derleme modundan bağımsız olarak uygulanır. Örneğin, --compilation_mode=opt
ile derleme yapmak ve bazı dosyaları seçerek daha güçlü optimizasyon etkinken veya optimizasyon devre dışıyken derlemek mümkündür.
Dikkat: Bazı dosyalar hata ayıklama simgeleriyle seçmeli olarak derlenirse simgeler bağlantı sırasında kaldırılabilir. Bu durum, --strip=never
ayarlanarak önlenebilir.
Söz dizimi: [+-]regex[,[+-]regex]...@option[,option]...
Nerede
regex
, başına ek gelebilen normal ifade anlamına gelir
kalıpları tanımlamak için +
, tanımlamak için -
ile
modelleri hariç tutun. option
, iletilen rastgele bir seçenek anlamına gelir
C++ derleyici kodlayın. Bir seçenek ,
içeriyorsa \,
gibi tırnak içine alınmalıdır. Seçenekler @
içerebilir, çünkü yalnızca ilk
@
, normal ifadeleri seçeneklerden ayırmak için kullanılır.
Örnek:
--per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs
komuta -O0
ve -fprofile-arcs
seçeneklerini ekler
file.cc
dışında //foo/
içindeki tüm .cc
dosyalar için C++ derleyici satırı.
--dynamic_mode=mode
Derleme kurallarındaki linkstatic özelliği ile etkileşime geçerek C++ ikili dosyalarının dinamik olarak bağlanıp bağlanmayacağını belirler.
Modlar:
default
: Bazel'in dinamik olarak bağlanıp bağlanmayacağını seçmesine olanak tanır. Daha fazla bilgi için linkstatic işlevine bakın.fully
: Tüm hedefleri dinamik olarak bağlar. Bu işlem, bağlantı süresini kısaltabilir ve sonuçta elde edilen ikili dosyaların boyutunu azaltabilirsiniz.off
: Tüm hedefleri çoğunlukla statik modda bağlar.-static
linkopts'te ayarlanırsa hedefler tamamen statik olacak şekilde değişir.
--fission (yes|no|[dbg][,opt][,fastbuild])
C++ hata ayıklama bilgilerini, normalde yazılacağı .o dosyaları yerine özel .dwo dosyalarına yazan Fission'u etkinleştirir. Bu, bağlantıların giriş boyutunu önemli ölçüde azaltır ve bağlantı sürelerini kısaltabilir.
[dbg][,opt][,fastbuild]
olarak ayarlandığında (örnek: --fission=dbg,fastbuild
), Fission yalnızca belirtilen derleme modları grubu için etkinleştirilir. Bu, bazelrc ayarları için yararlıdır. yes
olarak ayarlandığında Fisyon etkinleştirilir
bunu kabullenmek de önemlidir. no
olarak ayarlandığında, Bölünme özelliği evrensel olarak devre dışı bırakılır. Varsayılan değer no
'tir.
--force_ignore_dash_static
Bu işaret ayarlanırsa cc_*
kuralları BUILD dosyalarının linkopts bölümündeki tüm -static
seçenekleri yoksayılır. Bu, yalnızca C++ sertleştirme derlemeleri için bir geçici çözüm olarak tasarlanmıştır.
--[no]force_pic
Etkinleştirilirse tüm C++ derlemeleri konumdan bağımsız kod ("-fPIC") üretir, bağlantılar, PIC olmayan kitaplıklar yerine önceden oluşturulmuş PIC kitaplıklarını tercih eder. konumdan bağımsız yürütülebilir dosyalar ("-pie"). Varsayılan olarak devre dışıdır.
--android_resource_shrinking
android_binary kuralları için kaynak küçültme işleminin yapılıp yapılmayacağını seçer. android_binary kurallarında shrink_resources özelliği için varsayılan değeri belirler. Daha fazla bilgi için ilgili kuralın belgelerine bakın. Varsayılan olarak kapalıdır.
--custom_malloc=malloc-library-target
Belirtildiğinde, varsayılan değeri kullanan hedefler de dahil olmak üzere tüm malloc="target"
özelliklerini geçersiz kılarak her zaman belirtilen malloc uygulamasını kullanın (malloc
belirtilmez).
--crosstool_top=label
Bu seçenek, derleme sırasında tüm C++ derlemeleri için kullanılacak çapraz araç derleyici paketinin konumunu belirtir. Bazel bunun için
konumunu otomatik olarak belirlemek için kullanır ve bunu
--compiler
için ayarlar.
--host_crosstool_top=label
Belirtilmemişse Bazel, derleme sırasında çalıştırılan araçlar gibi exec yapılandırmasında kodu derlemek için --crosstool_top
değerini kullanır. Bu işaretin asıl amacı, çapraz derlemeyi etkinleştirmektir.
--apple_crosstool_top=label
Geçişli deps
içinde C/C++ kuralları derlemek için kullanılacak çapraz araç
objc*, ios* ve apple* kurallarına uygun olduğundan emin olun. Bu işaret, bu hedefler için --crosstool_top
değerinin üzerine yazar.
--compiler=version
Bu seçenek, C/C++ derleyici sürümünü (gcc-4.1.0
gibi) belirtir
derleme işlemi sırasında ikili programların derlenmesi için kullanılır. Şunu istiyorsanız:
oluşturmak için öncelikle bir CROSSTOOL dosyası kullanmanız gerekir
belirtiliyor.
--android_sdk=label
Kullanımdan kaldırıldı. Bu doğrudan belirtilmemelidir.
Bu seçenek, Android SDK/platform araç zincirini belirtir. ve Android'le ilgili her türlü derleme için kullanılacak Android çalışma zamanı kitaplığı tıklayın.
android_sdk_repository
aşağıdaki durumlarda Android SDK'sı otomatik olarak seçilir:
kuralı WORKSPACE dosyasında tanımlanır.
--java_toolchain=label
İşlemsiz Yalnızca geriye dönük uyumluluk için saklandı.
--host_java_toolchain=label
İşlemsiz Yalnızca geriye dönük uyumluluk için saklandı.
--javabase=(label)
İşlemsiz Yalnızca geriye dönük uyumluluk için saklandı.
--host_javabase=label
İşlemsiz Yalnızca geriye dönük uyumluluk için saklandı.
Yürütme stratejisi
Bu seçenekler, Bazel'in derlemeyi nasıl yürüteceğini etkiler. Bunların çıkış dosyaları üzerinde önemli bir etkisi olmamalıdır oluşturmamıza yardımcı olur. Genellikle ana etkileri derleme hızıdır.
--spawn_strategy=strategy
Bu seçenek, komutların nerede ve nasıl yürütüleceğini kontrol eder.
standalone
, komutların yerel alt işlemler olarak yürütülmesine neden olur. Bu değerin desteği sonlandırılmıştır. Lütfen bunun yerinelocal
sütunlarını kullanın.sandboxed
, komutların yerel makinedeki bir korumalı alan içinde yürütülmesine neden olur. Bu, tüm giriş dosyalarının, veri bağımlılıklarının ve araçlarının doğrudan bağımlılıklarısrcs
,data
vetools
özelliklerindedir. Bazel, korumalı alana alınan yürütmeyi destekleyen sistemlerde, yerel korumalı alana almayı varsayılan olarak etkinleştirir.local
, komutların yerel alt işlemler olarak yürütülmesine neden olur.worker
, varsa komutların kalıcı çalışan kullanılarak yürütülmesine neden olur.docker
, komutların yerel makinedeki bir Docker korumalı alanında yürütülmesine neden olur. Bunun için Docker'ın yüklü olması gerekir.remote
, komutların uzaktan yürütülmesine neden olur; yalnızca uzak yürütücü ayrı olarak yapılandırıldı.
--strategy mnemonic=strategy
Bu seçenek, komutların nerede ve nasıl yürütüleceğini kontrol ederek --spawn_strategy (ve --genrule_strategy ve anımsatıcı Genrule) anımsatıcı bazında. Desteklenen stratejiler ve etkileri için --spawn_strategy bölümüne bakın.
--strategy_regexp=<filter,filter,...>=<strategy>
Bu seçenek, açıklamaları belirli bir regex_filter
ile eşleşen komutları yürütmek için hangi stratejinin kullanılacağını belirtir. Görüntüleyin
Ayrıntılı bilgi için --per_file_copt
regex_filter eşleştirmede bulunmayı unutmayın. Görüntüleyin
--spawn_strategy, desteklenen
ve etkilerini konuşacağız.
Açıklamayla eşleşen son regex_filter
kullanılır. Bu seçenek, stratejiyi belirtmek için diğer işaretleri geçersiz kılar.
- Örnek:
--strategy_regexp=//foo.*\\.cc,-//foo/bar=local
, açıklamaları //foo.*.cc ile eşleşiyorsa ancak //foo/bar ile eşleşmiyorsalocal
stratejisini kullanarak işlemleri çalıştırır. - Örnek:
--strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed
, "//foo/bar/baz derleniyor" komutunusandboxed
stratejisiyle çalıştırır ancak sırayı tersine çevirereklocal
ile çalıştırır. - Örnek:
--strategy_regexp='Compiling.*/bar=local,sandboxed'
koşusu '//foo/bar/baz derleniyor'local
stratejisini uyguluyor ve Başarısız olursasandboxed
.
--genrule_strategy=strategy
Bu, --strategy=Genrule=strategy
için kullanımdan kaldırılmış bir kısaltmadır.
--jobs=n
(-j)
Bir tamsayı bağımsız değişkeni alan bu seçenek, sırasında eş zamanlı olarak yürütülmesi gereken işlerin sayısını yürütme aşamasını ele alacağız.
--progress_report_interval=n
Bazel, henüz tamamlanmamış işlerle (ör. uzun süre çalışan testler) ilgili ilerleme raporunu düzenli aralıklarla yazdırır. Bu seçenek, raporlama sıklığını belirler. İlerleme durumu n
saniyede bir yazdırılır.
Varsayılan değer 0'dır. Bu, artımlı algoritma anlamına gelir: ilk rapor 10 saniye sonra, 30 saniye sonra ve sonra bu ilerleme dakikada bir raporlanıyor.
Bazel, --curses
tarafından belirtildiği gibi, imleç kontrolünü kullandığında ilerleme her saniyede bir raporlanır.
--local_{ram,cpu}_resources resources or resource expression
Bu seçenekler, Bazel'in yerel olarak çalıştırılacak derleme ve test etkinliklerini planlarken dikkate alabileceği yerel kaynak miktarını (MB cinsinden RAM ve mantıksal CPU çekirdeği sayısı) belirtir. Bu kararlar
İsteğe bağlı olarak, bir tam sayı veya anahtar kelime (HOST_RAM veya HOST_CPUS) ve ardından [-|*
kayıp]
gelir
(örneğin, --local_cpu_resources=2
, --local_ram_resources=HOST_RAM*.5
,
--local_cpu_resources=HOST_CPUS-1
) tıklayın.
İşaretler bağımsızdır; biri veya ikisi birden ayarlanmış olabilir. Varsayılan olarak Bazel,
doğrudan yerel sistemin yapılandırmasından alınan RAM miktarı ve CPU çekirdeği sayısı
--[no]build_runfile_links
Varsayılan olarak etkin olan bu seçenek,
testler ve ikili programlar için sembolik bağlantılar çıkış dizininde oluşturulmalıdır.
--nobuild_runfile_links
kullanmak, tüm hedeflerin derlenip derlenmediğini doğrulamak için çalıştırma dosyası ağaçlarını oluşturma yükü olmadan faydalı olabilir.
Testler (veya uygulamalar) çalıştırıldığında, çalışma zamanındaki veri bağımlılıkları tek bir yerde toplanır. Bazel'in çıkış ağacında bu "çalıştırma dosyaları" ağacı genellikle ilgili ikili dosyanın veya testin kardeşi olarak köklenir.
Test yürütme sırasında çalıştırma dosyalarına formun yolları kullanılarak erişilebilir
$TEST_SRCDIR/canonical_repo_name/packagename/filename
Çalıştırma dosyası ağacı, testlerin beyan edilen bağımlılıklarının bulunduğu tüm dosyalara erişmesini sağlar ve başka hiçbir şeye erişmesine izin vermez. Ölçüt
Runfiles ağacı varsayılan olarak
gerekli dosyalara sembolik bağlantılar sağlar. Bağlantı grubu büyüdükçe bu işlemin maliyeti de artar. Bazı büyük derlemelerde, özellikle her testin (veya uygulamanın) kendi çalışma dosyası ağacını gerektirmesi nedeniyle genel derleme süresine önemli ölçüde katkıda bulunabilir.
--[no]build_runfile_manifests
Varsayılan olarak etkinleştirilen bu seçenek, runfiles manifestlerinin
çıkış ağacına yazılmalıdır.
Devre dışı bırakıldığında --nobuild_runfile_links
.
Runfile ağaçları, bellek içi manifest'lerden uzaktan oluşturulacağı için testler uzaktan yürütülürken devre dışı bırakılabilir.
--[no]discard_analysis_cache
Bu seçenek etkinleştirildiğinde Bazel analiz önbelleğini siler devreye girer. Böylece, sistemde daha fazla bellekten yürütme aşamasında (yaklaşık %10). Bunun dezavantajı, sonraki artımlı derlemelerin daha yavaş olmasıdır. Hafıza tasarrufu modu hakkında da bilgi edinin.
--[no]keep_going
(-k)
GNU Make'da olduğu gibi, bir derlemenin yürütme aşaması ilk hatasıyla karşılaşıldı. Bazen hatalarla karşılaşsanız bile mümkün olduğunca fazla derleme yapmaya çalışmak faydalı olabilir. Bu seçenek, belirtildiğinde, derleme o davranışı ön koşulları başarıyla oluşturulmuş ancak hataları yok sayar.
Bu seçenek genellikle planlama aşamasının yürütülme aşamasıyla
aynı zamanda analiz aşamasını da etkiler: birkaç hedef
bir derleme komutunda belirtilir ancak yalnızca bazıları
başarılı bir şekilde analiz edilirse derleme bir hatayla
--keep_going
belirtilmediği sürece
yürütme aşamasına geçer. Ancak yalnızca projenin amaçları doğrultusunda
başarılı bir şekilde analiz edildi.
--[no]use_ijars
Bu seçenek, Bazel tarafından java_library
hedeflerinin derlenme şeklini değiştirir. Bazel, bağımlı java_library
hedeflerini derlemek için java_library
çıktısını kullanmak yerine yalnızca özel olmayan üyelerin (herkese açık, korumalı ve varsayılan (paket) erişim yöntemleri ve alanları) imzalarını içeren arayüz jar'ları oluşturur ve bağımlı hedefleri derlemek için arayüz jar'larını kullanır. Bu da,
yalnızca kaynak kodda değişiklik yapıldığında,
yöntemi kuruluşları veya özel
üyeleri olabilir.
--[no]interface_shared_objects
Bu seçenek, arayüz paylaşılan nesneleri etkinleştirir. Bu işlem ikili programları ve diğer paylaşılan kitaplıklar, paylaşılan bir nesnenin arayüzüne bağlıdır. daha doğru sonuçlar verir. Yalnızca uygulama değiştiğinde Bazel, değiştirilen paylaşılan kitaplığa bağlı hedefleri gereksiz yere yeniden oluşturmaktan kaçınabilir.
Çıkış seçimi
Bu seçenekler neyin oluşturulacağını veya test edileceğini belirler.
--[no]build
Bu seçenek, derlemenin yürütme aşamasının gerçekleşmesine neden olur ve varsayılan olarak açıktır. Bu seçenek devre dışı bırakıldığında yürütme aşaması atlanır ve yalnızca ilk iki aşama (yükleme ve analiz) gerçekleşir.
Bu seçenek, herhangi bir şey oluşturmadan BUILD dosyalarını doğrulamak ve girişlerdeki hataları tespit etmek için yararlı olabilir.
--[no]build_tests_only
Belirtilirse Bazel, yalnızca *_test
öğesini çalıştırmak için gerekli olanı oluşturur
ve özellikleri nedeniyle filtrelenmemiş test_suite
kural
size [beden]
zaman aşımı,
tag veya
dil.
Belirtilirse Bazel, komut satırında belirtilen diğer hedefleri yoksayar.
Bu seçenek varsayılan olarak devre dışıdır ve Bazel her şeyi oluşturur.
filtrelenen *_test
ve test_suite
kuralları dahil olmak üzere
teşvik etmek anlamına gelir. bazel test --build_tests_only foo/...
çalıştırmak, foo
ağacındaki tüm derleme hatalarını algılayamayabileceğinden bu bilgi faydalıdır.
--[no]check_up_to_date
Bu seçenek, Bazel'in derleme yapmamasına, yalnızca belirtilen tüm hedeflerin güncel olup olmadığını kontrol etmesine neden olur. Bu durumda derleme, her zamanki gibi başarıyla tamamlanır. Ancak, güncel olmayan dosyalar derlenmez, bunun yerine bir hata bildirilir ve derleme başarısız olur. Bu seçenek, bir derlemenin kaynak düzenlemeden daha yeni yapılıp yapılmadığını belirlemek için (ör. göndermeden önce kontroller için) derleme maliyetine girmeden yararlı olabilir.
Ayrıca bkz. --check_tests_up_to_date
.
--[no]compile_one_dependency
Bağımsız değişken dosyalarının tek bir bağımlılığını derleyin. Bu, IDE'lerde kaynak dosyaların söz dizimi kontrolünde yararlıdır. Örneğin, düzenleme/derleme/test döngüsünde hataları mümkün olduğunca erken tespit etmek için kaynak dosyaya bağlı tek bir hedefi yeniden oluşturarak. Bu bağımsız değişken, işaret olmayan bağımsız değişkenler yorumlanır: Her bağımsız değişken bir dosya hedef etiketi veya düz dosya adı, mevcut çalışmaya göre dizini ve her kaynak dosya adına bağlı bir kural oluşturulur. Örneğin, C++ ve Java aynı dil alanındaki kurallar tercihen seçilir. Örneğin, aynı tercihe sahip birden çok kural vardır. Bu kural, BUILD dosyası seçildi. Şunu yapmayan açıkça adlandırılmış bir hedef kalıbı hata ile sonuçlanır.
--save_temps
--save_temps
seçeneği, derleyiciden gelen geçici çıkışların kaydedilmesine neden olur. .s dosyaları (birleştirici kodu), .i (işleme öncesi C) ve .ii (işleme öncesi C++) dosyaları bunlara örnek olarak verilebilir. Bu çıkışlar hata ayıklamada genellikle faydalıdır. Geçici dosyalar yalnızca komut satırında belirtilen hedef grubu için oluşturulur.
--save_temps
işareti şu anda yalnızca cc_* kuralları için kullanılabilir.
Bazel'in ek çıkış dosyalarının konumunu yazdırdığından emin olmak için
--show_result n
ayar yeterince yüksek.
--build_tag_filters=tag[,tag]*
Belirtilirse Bazel yalnızca en az bir zorunlu etiketi olan (belirtilmişse) ve hariç tutulan etiketi olmayan hedefler oluşturur. Derleme etiketi filtre, isteğe bağlı olarak virgülle ayrılmış anahtar kelimeler listesi olarak belirtilir başına '-' eklenir hariç tutulan etiketleri belirtmek için kullanılan işaret. Zorunlu etiketlerin önünde "+" işareti de bulunabilir.
Testleri çalıştırırken Bazel, test hedefleri için --build_tag_filters
değerini yoksayar
bu filtreyle eşleşmeseler bile oluşturulur ve çalıştırılabilir. Bunları oluşturmaktan kaçınmak için filtre uygulayın
--test_tag_filters
kullanarak veya açık bir şekilde hariç tutarak test hedeflerini test edin.
--test_size_filters=size[,size]*
Belirtilirse Bazel, öğeyi test etmek için --build_tests_only
yalnızca belirtilen boyuttaki hedefleri test edin. Test boyutu filtresi
izin verilen test boyutu değerlerinin virgülle ayrılmış listesi (küçük,
orta, büyük veya çok büyük) ; isteğe bağlı olarak önüne '-' eklenir belirtmek için kullanılan işaret
test boyutları hariç tutuldu. Örneğin,
% bazel test --test_size_filters=small,medium //foo:all
ve
% bazel test --test_size_filters=-large,-enormous //foo:all
//foo içindeki küçük ve orta düzey testleri test eder.
Varsayılan olarak, test boyutu filtrelemesi uygulanmaz.
--test_timeout_filters=timeout[,timeout]*
Belirtilirse Bazel yalnızca belirtilen zaman aşımına sahip test hedeflerini test eder (veya --build_tests_only
de belirtilirse oluşturur). Zaman aşımı filtresini test edin
izin verilen test zaman aşımı değerlerinin virgülle ayrılmış listesi (kısa,
orta, uzun veya sonsuz), isteğe bağlı olarak öncesinde '-' bulunur. belirtmek için kullanılan işaret
test zaman aşımları hariç tutuldu. Örnek söz dizimi için --test_size_filters bölümüne bakın.
Varsayılan olarak test zaman aşımı filtreleme uygulanmaz.
--test_tag_filters=tag[,tag]*
Belirtilirse Bazel yalnızca en az bir zorunlu etikete (varsa) sahip olan ve hariç tutulan etiketi olmayan test hedeflerini test eder (veya --build_tests_only
de belirtilirse derleyebilir). Test etiket filtresi, etiket anahtar kelimelerinin virgülle ayrılmış listesi olarak belirtilir ve isteğe bağlı olarak hariç tutulan etiketleri belirtmek için "-" işareti ile başlar. Gerekli etiketler de
önünde "+" olmalıdır işaretini tıklayın.
Örneğin,
% bazel test --test_tag_filters=performance,stress,-flaky //myproject:all
performance
veya stress
etiketiyle etiketlenmiş ancak flaky
etiketiyle etiketlenmemiş hedefleri test eder.
Varsayılan olarak, test etiketi filtreleme uygulanmaz. Ayrıca, kampanyalarınızı filtrelemek için
testin size
ve local
etiketlerinde
uyarlayabilirsiniz.
--test_lang_filters=string[,string]*
Test kuralının adlarına atıfta bulunan dizelerin virgülle ayrılmış listesini belirtir
sınıflar. foo_test
kural sınıfına başvurmak için "foo" dizesini kullanın. Bazel
yalnızca test (veya --build_tests_only
belirtilmişse derleme)
hedeflerinden emin olun. 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
örneği olan hedefleri test eder.
% bazel test --test_lang_filters=-foo,-bar //baz/...
foo_test
ve bar_test
örnekleri hariç //baz/...
'teki tüm hedefleri test eder.
--test_filter=filter-expression
Test çalıştırıcısının çalıştırılacak testlerin bir alt kümesini seçmek için kullanabileceği bir filtreyi belirtir. Çağrıda belirtilen tüm hedefler oluşturulur ancak ifade yalnızca bazıları yürütülebilir; bazı durumlarda, nasıl çalıştırılacağını da görebilirsiniz.
filter-expression özelliğinin özel yorumu
testi çalıştırmaktan sorumlu test çerçevesidir. Bir küre olabilir,
alt dize veya regexp'i seçin. --test_filter
kolaylık sağlar
farklı --test_arg
filtre bağımsız değişkenlerini geçirerek
ancak tüm çerçeveler bu sistemi desteklemez.
Ayrıntı düzeyi
Bu seçenekler Bazel çıkışının ayrıntı düzeyini kontrol eder. ya da ek günlük dosyalarına bağlayabilirsiniz.
--explain=logfile
Dosya adı bağımsız değişkeni gerektiren bu seçenek,
bazel build
ekibinin yürütme aşamasındaki bağımlılık denetleyicisini
her derleme adımı için neden yürütüldüğünü ya da
olduğundan emin olun. Açıklama yazılmış
logfile konumuna ekleyin.
Beklenmedik yeniden oluşturmalarla karşılaşıyorsanız bu seçenek aşağıdakileri yapmanıza yardımcı olabilir:
bunun nedenini anlayabilirsiniz. .bazelrc
cihazınıza ekleyin
sonraki tüm derlemeler için günlük kaydı yapılır ve ardından günlüğü
beklenmedik şekilde yürütüldüğü bir yürütme adımı görebilirsiniz. Bu seçenek
küçük bir performans cezası bulunabilir. Bu nedenle,
gerekli olmadığında da erişim izni verebilirsiniz.
--verbose_explanations
Bu seçenek, oluşturulan açıklamaların ayrıntısını artırır --explain (açıkla) seçeneği etkinleştirildiğinde.
Özellikle, ayrıntılı açıklamalar etkinleştirilirse ve bir çıkış dosyası yeniden oluşturulur. Çünkü komut derlediyseniz açıklama dosyasındaki çıkış yeni komutun tüm ayrıntılarını içermelidir (en azından komutlarında kullanılabilir).
Bu seçeneğin kullanılması,
ve bu hatanın neden olduğu
--explain
--explain
etkin değilse
--verbose_explanations
özelliğinin herhangi bir etkisi yoktur.
--profile=file
Bir dosya adı bağımsız değişkenini alan bu seçenek, Bazel'in
profil verilerini bir dosyaya
çıkarmanız gerekir. Ardından veriler, bazel analyze-profile
komutu kullanılarak analiz edilebilir veya ayrıştırılabilir. Build profili şu durumlarda faydalı olabilir:
öğrendiğiniz için Bazel'ın build
komutunun zamanının nerede geçtiğini anlamaya çalışın.
--[no]show_loading_progress
Bu seçenek, Bazel'in paket yükleme ilerlemesinin çıktısını almasına neden olur mesaj. Bu seçenek devre dışı bırakılırsa mesajlar gösterilmez.
--[no]show_progress
Bu seçenek ilerleme durumu mesajlarının görüntülenmesine neden olur; tarafından açıldı varsayılandır. Devre dışı bırakıldığında ilerleme durumu mesajları engellenir.
--show_progress_rate_limit=n
Bu seçenek, bazelin n saniyede en fazla bir ilerleme mesajı göstermesine neden olur. Burada n gerçek bir sayıdır. Bu seçenek için varsayılan değer 0.02'dir. Yani bazel, ilerlemeyi sınırlandırır. her 0,02 saniyede bir e-posta gönderebilir.
--show_result=n
Bu seçenek, bazel build
komutunun sonunda sonuç bilgilerinin yazdırılmasını kontrol eder. Varsayılan olarak,
bir hedef belirlendiğinde, Bazel aynı zamanda bir
ve hedef başarıyla güncellendi.
hedefin oluşturduğu çıkış dosyalarının listesi. Birden fazla
hedef belirtildiğinde, sonuç bilgileri görüntülenmez.
Sonuç bilgileri tek bir kod derlemesi için yararlı olsa da,
birden fazla hedef ya da birkaç hedef (ör. bir üst düzey
proje ağacı varsa) bu bilgiler bunaltıcı ve dikkat dağıtıcı olabilir;
bu seçenek cihazın kontrol edilmesine olanak tanır. --show_result
.
Maksimum hedef sayısı olan bir tam sayı bağımsız değişkeni alır
(tam sonuç bilgilerinin yazdırılması gereken yer). Varsayılan olarak
değer 1'dir. Bu eşiğin üzerinde, bağımsız hedefler için sonuç bilgisi gösterilmez. Bu nedenle sıfır, sonuç bilgilerinin her zaman atlanmasına neden olur ve çok büyük bir değer, sonucun her zaman yazdırılmasına neden olur.
Kullanıcılar, dönüşüm verilerini düzenli olarak
küçük bir hedef grubu oluşturmak (örneğin,
sırasında) ve geniş bir hedef grubunu,
(örneğin yeni bir çalışma alanı kurarken ya da
regresyon testleri) için geçerlidir. İlk durumda sonuç bilgileri çok yararlıyken ikinci durumda daha az yararlıdır. Tüm seçeneklerde olduğu gibi bu, .bazelrc
dosyası aracılığıyla dolaylı olarak belirtilebilir.
Dosyalar, kopyalanıp yapıştırılmasını kolaylaştırmak için yazdırılır dosya adını kabuğa ekleyin. "Güncel" veya "başarısız" her hedefe yönelik mesajlar komut dosyaları tarafından kolayca ayrıştırılabilir performansa sahip.
--sandbox_debug
Bu seçenek, işlem için korumalı alan kullanılırken Bazel'in ekstra hata ayıklama bilgileri yazdırmasına neden olur birkaç adım var. Bu seçenek, korumalı alan dizinlerini de korur. Böylece dosyalar, işlemlere görünür olur. incelenebilir.
--subcommands
(-s
)
Bu seçenek, Bazel'in yürütme aşamasının komut satırının tamamını yazdırmasına neden olur uygulamanız gerekir.
>>>>> # //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 kolayca kopyalanıp bir kabuk komut istemine yapıştırılabilirler.
(Kavrayıcı parantezler, kabuğunuzu cd
ve exec
çağrılarına karşı korumak için sağlanmıştır; bunları kopyaladığınızdan emin olun!)
Bununla birlikte,
ve sembolik bağlantı ağaçları
oluşturmaktır. Bunlar için görüntülenecek komut satırı yoktur.
--subcommands=pretty_print
, yazdırmaya iletilebilir
komutun bağımsız değişkenlerini tek bir satır yerine bir liste şeklinde düzenleyebilirsiniz. Bu,
uzun komut satırlarının daha okunabilir olmasına yardımcı olur.
Ayrıca aşağıdaki --verbose_failures konusuna da bakın.
Alt komutları bir dosyaya araç dostu bir biçimde kaydetmek için --execution_log_json_file ve --execution_log_binary_file seçeneklerine bakın.
--verbose_failures
Bu seçenek, Bazel'in yürütme aşamasının komut satırının tamamını yazdırmasına neden olur komutunu çalıştırın. Bu, bir projede hata ayıklamak için yardımcı olur.
Başarısız komutlar, Bourne kabuğuyla uyumlu bir söz diziminde yazdırılır. Bu söz dizimi, kabuk isteminde kopyalanıp yapıştırılmak için uygundur.
Çalışma alanı durumu
Bu seçenekleri kullanarak Bazel tarafından oluşturulmuş ikili programlar:
kaynak denetimi revizyonu veya çalışma alanıyla ilgili diğer bilgiler gibi ikili programlardır. Tekliflerinizi otomatikleştirmek ve optimize etmek için
Bu mekanizmayı, stamp
özelliğini destekleyen kurallarla (örneğin,
genrule
, cc_binary
ve diğerleri.
--workspace_status_command=program
Bu işaret, Bazel'in her derlemeden önce çalıştıracağı bir ikili program belirtmenize olanak tanır. Program, çalışma alanının durumuyla ilgili bilgiler (ör. mevcut kaynak denetimi düzeltmesi).
İşaretin değeri, yerel bir programın yolu olmalıdır. Linux/macOS'te bu, yürütülebilir herhangi bir dosya olabilir. Windows'ta bu, yerel bir ikili dosya (genellikle ".exe", ".bat" veya ".cmd" dosyası) olmalıdır.
Program, standart çıkışa sıfır veya daha fazla anahtar/değer çifti (her satırda bir giriş) yazdırmalı ve ardından sıfır değerini döndürerek çıkmalıdır (aksi takdirde derleme başarısız olur). Anahtar adları herhangi bir şey olabilir ancak yalnızca büyük harf ve alt çizgi kullanılabilir. Anahtar adından sonraki ilk boşluk, onu değer. Değer, satırın geri kalanıdır (ek boşluklar dahil). Ne önemli ne de değer birden çok satıra yayılabilir. Anahtarlar yinelenmemelidir.
Bazel, anahtarları iki pakete ayırır: "stabil" "değişken" olabilir. ("İstikrarlı” ve "değişken" kullanım dışı olduğu için bunları fazla düşünmeyin.)
Daha sonra Bazel, anahtar/değer çiftlerini iki dosyaya yazar:
bazel-out/stable-status.txt
. anahtar adınınSTABLE_
ile başladığı tüm anahtarları ve değerleri içerirbazel-out/volatile-status.txt
. geri kalan anahtarları ve değerlerini içerir
Sözleşme:
"Kararlı" anahtarların değerleri mümkünse nadiren değişmelidir.
bazel-out/stable-status.txt
içeriği değişirse Bazel, bu içeriğe bağlı işlemleri geçersiz kılar. Başka bir deyişle, sabit bir anahtarın değeri değişirse Bazel, damgalanmış işlemleri yeniden çalıştırır. Bu nedenle, kararlı durum zaman damgaları gibi öğeler içermemelidir. Çünkü bunlar her zaman değişir ve Bazel'in her derlemede damgalanmış işlemleri yeniden çalıştırmasına neden olur.Bazel her zaman aşağıdaki sabit anahtarları verir:
BUILD_EMBED_LABEL
:--embed_label
değerinin değeriBUILD_HOST
: Bazel'in çalıştığı ana makinenin adıBUILD_USER
: Bazel'in çalıştığı kullanıcının adı
"Değişken" anahtarların değerleri sık sık değişebilir. Bazel, zaman damgalarında olduğu gibi bunların her zaman değişmesini bekler ve
bazel-out/volatile-status.txt
dosyasını gerektiği gibi günceller. Ancak, damgalanmış işlemlerin her zaman yeniden çalıştırılmasını önlemek için Bazel, değişken dosyanın hiç değişmediğini varsayar. Başka bir deyişle, değişken durum dosyası, içeriği değiştirildiğinde, Bazel ona bağlı işlemleri geçersiz kılmaz. İşlemlerin diğer girişleri değişirse Bazel bu işlemi yeniden çalıştırır ve işlem güncellenen değişken durumu görür. Ancak değişken durumunun değişmesi işlemi geçersiz kılmaz.Bazel her zaman aşağıdaki değişken anahtarları döndürür:
BUILD_TIMESTAMP
: Unix sıfır zamanından itibaren saniye cinsinden derleme zamanı (System.currentTimeMillis()
değerinin binde bire bölünmesiyle elde edilen değer)FORMATTED_DATE
: derlemenin zamanı UTC biçimindeyyyy MMM d HH mm ss EEE
(ör. 2023 Haz 2 01 44 29 Cuma) olarak biçimlendirilir.
Linux/macOS'te --workspace_status_command=/bin/true
sürümünü geçirebilirsiniz
true
hiçbir şey yapmaz, başarıyla çalışma alanı durumunu almayı devre dışı bırakın (çıkılır
sıfır ile) ve çıktı yazdırır. Windows'da MSYS'nin true.exe
yolunu geçirebilirsiniz
aynı etkiyi yaratır.
Çalışma alanı durum komutu herhangi bir nedenle başarısız olursa (sıfır dışında çıkar) derleme başarısız olur.
Linux'ta Git kullanan örnek program:
#!/bin/bash echo "CURRENT_TIME $(date +%s)" echo "RANDOM_HASH $(cat /proc/sys/kernel/random/uuid)" echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)" echo "STABLE_USER_NAME $USER"
Bu programın yolunu --workspace_status_command
ile iletin. Böylece kararlı durum dosyası STABLE satırlarını, 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 dosyalar içine yerleştirilip yerleştirilmeyeceğini kontrol eder.
Damgalama, stamp
özelliği kullanılarak kural bazında açıkça etkinleştirilebilir veya devre dışı bırakılabilir. Ayrıntılı bilgi için lütfen Build Ansiklopedi'yi inceleyin. Zaman
bir kural stamp = -1
(*_binary
kural için varsayılan) ayarlar, bu seçenek
damgalamanın etkin olup olmadığını belirler.
Bazel, yönetici yapılandırması için oluşturulan ikili programları hiçbir zaman damgalamaz.
ve stamp
özelliğinden bağımsız olarak satın alabilirsiniz. stamp =
0
değerini (*_test
kuralları için varsayılan) ayarlayan kurallarda, --[no]stamp
değerinden bağımsız olarak damga basma devre dışı bırakılır. --stamp
değerinin belirtilmesi, şu durumlarda hedefleri yeniden oluşturulmaya zorlamaz:
ve bağımlılıkları değişmedi.
--nostamp
ayarlamak, genel olarak derleme performansı açısından caziptir.
giriş dalgalanmasını azaltır ve derleme önbelleğine almayı en üst düzeye çıkarır.
Platform
Derlemelerin çalışma şeklini yapılandıran ana makineyi ve hedef platformları kontrol etmek ve Bazel kurallarının hangi yürütme platformlarını ve araç zincirlerini kullanabileceğini kontrol etmek için kullanılır.
Lütfen Platformlar ve Araç Zincirleri ile ilgili arka plan bilgilerine bakın.
--platforms=labels
Uygulama için hedef platformları açıklayan platform kurallarının etiketleri komutuna ekleyin.
--host_platform=label
Barındırıcı sistemi tanımlayan bir platform kuralının etiketi.
--extra_execution_platforms=labels
İşlemleri çalıştırmak için yürütme platformları olarak kullanılabilen platformlar. Platformlar, tam hedefe göre veya hedef kalıbı olarak belirtilebilir. Bu platformlar, register_execution_platforms() tarafından MODULE.bazel dosyalarında belirtilen platformlardan önce değerlendirilir. Bu seçenek, öncelik sırasına göre platformların virgülle ayrılmış bir listesini kabul eder. İşaret birden fazla kez geçilirse en son geçersiz kılma işlemleri.
--extra_toolchains=labels
Araç zinciri çözümü sırasında dikkate alınacak araç zinciri kuralları. Alet Zincirleri tam veya hedef kalıp olarak belirtilebilir. Bu araç zincirleri, register_toolchains() tarafından MODULE.bazel dosyalarında tanımlananlardan önce dikkate alınır.
--toolchain_resolution_debug=regex
Zincir araç türü normal ifadeyle eşleşirse zincir araçları bulurken hata ayıklama bilgilerini yazdırın. Birden fazla normal ifade virgülle ayrılabilir. Normal ifade, başında -
kullanılarak reddedilebilir. Bu, Bazel veya Starlark kurallarının geliştiricilerine, eksik araç zincirleri nedeniyle hata ayıklama hatalarıyla ilgili yardımcı olabilir.
Çeşitli
--flag_alias=alias_name=target_path
Daha uzun Starlark derleme ayarlarını daha kısa bir ada bağlamak için kullanılan bir kolaylık işareti. Daha fazla bilgi için Starlark Yapılandırmaları başlıklı makaleyi inceleyin.
--symlink_prefix=string
Oluşturulan kolaylık sembollerinin ön ekini değiştirir. İlgili içeriği oluşturmak için kullanılan
sembolik bağlantı öneki için varsayılan değer bazel-
şeklindedir
bazel-bin
, bazel-testlogs
ve sembolik bağlantılarını oluşturur
bazel-genfiles
.
Sembolik bağlantılar herhangi bir nedenle oluşturulamazsa ancak derlemenin yine de başarılı olduğu kabul edilir. Özellikle, salt okunur bir dizinde veya sahip olduğunuz dizinde izin verilmelidir. Bilgilendirme amaçlı yazdırılan tüm yollar bir derlemenin sonundaki mesajlar yalnızca sembolik bağlantılar beklenen değeri işaret ediyorsa konum; Yani, bu belgelerin doğruluğuna veya sembolik bağlantılara güvenemeyebilirsiniz.
Bu seçeneğin yaygın olarak kullanılan bazı değerleri:
Sembolik bağlantı oluşturmayı engelleme:
--symlink_prefix=/
, Bazel'ınbazel-out
ve sembolleri de dahil olmak üzere herhangi bir sembolik bağlantı oluşturunbazel-<workspace>
sembolik bağlantılardır. Sembolik bağlantı oluşturmayı tamamen engellemek için bu seçeneği kullanın.Karmaşayı azaltmak için:
--symlink_prefix=.bazel/
, Bazel'in gizli bir dizin.bazel
içinde bulunanbin
(vb.) adlı sembolik bağlantılar
--platform_suffix=string
Yapılandırmanın kısa adına, çıkış dizininde bulabilirsiniz. Bu seçeneğin farklı değerlere ayarlanması, dosyaları farklı dizinlere de erişebilir. Örneğin, ya da çıkış dosyalarını korumak için birbirlerinin çıkış dosyalarını engellemelerini kullanabilirsiniz.
--default_visibility=(private|public)
Bazel varsayılan görünürlük değişikliklerini test etmek için geçici işaret. Genel kullanım için tasarlanmamıştır eksiksiz olması için belgelenir sake.
--starlark_cpu_profile=_file_
Değeri bir dosyanın adı olan bu işaret, Bazel'in tüm Starlark iş parçacıklarının CPU kullanımıyla ilgili istatistikleri toplamasına ve profili pprof biçiminde adlandırılmış dosyaya yazmasına neden olur.
Aynı işleve sahip Starlark fonksiyonlarını tanımlamak için aşırı hesaplama nedeniyle yüklemeyi ve analizi yavaşlatabilir. Ö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ı deneyin: svg
,
web
ve list
.
Yayınlar için Bazel kullanma
Bazel, geliştirme aşamasında hem yazılım mühendisleri tarafından hem de dağıtım için ikili programları hazırlarken sürüm mühendisleri tarafından gerçekleştirilebilir. devreye giriyor. Bu bölümde, reklam yayınlamaya ilişkin ipuçları, mühendislerden biri.
Önemli seçenekler
Sürüm derlemeleri için Bazel kullanılırken diğer komut dosyalarıyla aynı sorunlar ortaya çıkıyor açıklayacağım. Daha fazla bilgi için bkz. Komut dosyalarından Bazel'i çağırın. Özellikle aşağıdaki seçenekler önemle tavsiye edilir:
Şu seçenekler de önemlidir:
--package_path
--symlink_prefix
: birden fazla yapılandırmaya yönelik derlemeleri yönetmek için her yapıyı ayrı ayrı "64 bit" gibi ayrı bir tanımlayıcıyla ve "32 bit" karşılaştırması. Bu seçenek,bazel-bin
(vb.) sembolik bağlantılarını birbirinden ayırır.
Testler yapılıyor
Bazel ile test oluşturmak ve çalıştırmak için bazel test
yazıp, ardından
test hedeflerinin adını yazın.
Varsayılan olarak bu komut eşzamanlı olarak derleme ve test gerçekleştirir
belirtilen tüm hedeflerin oluşturulması (test dışı tüm hedefler dahil olmak üzere)
komut satırında belirtilen hedefleri) ve test sonuçlarını
*_test
ve test_suite
hedeflerini
ön koşulları oluşturulur, yani test yürütme
yapıyla iç içe geçmiştir. 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 "otomatik" olarak ayarlanırsa (varsayılan) değerine ayarlanırsa Bazel, aşağıdaki koşullar geçerlidir:
- Bazel, testteki veya bağımlılıklarındaki değişiklikleri tespit eder
- Test
external
olarak işaretlendi --runs_per_test
ile birden fazla test çalıştırması istendi- test başarısız oldu.
"No" (hayır) ise tüm testler koşulsuz olarak yürütülür.
"Evet" ise önbelleğe alma davranışı, test hatalarını ve --runs_per_test
ile test çalıştırma işlemlerini önbelleğe alabilmesi dışında otomatik ile aynı olur.
Bu seçeneği
.bazelrc
dosyası
-t
(açık) veya -t-
(kapalı) kısaltmaları
varsayılan değeri geçersiz kılmak için çok kullanışlıdır.
--check_tests_up_to_date
Bu seçenek, Bazel'e testleri çalıştırmasını değil, yalnızca önbelleğe alınmış test sonuçlarını kontrol edip raporlamasını söyler. Henüz doğrulanmamış testler test sonuçları güncel olmayan kullanıcılar (örneğin, kaynak kodu veya derleme seçenekleri değiştiyse) Bazel, bir hata mesajı ("test sonucu güncel değil"), testin sonucunu "DURUM YOK" (renk çıkışı etkinse kırmızı renkte) gösterilir ve değer değeri sıfır olmayan bir çıkış kodu içerir.
Bu seçenek aynı zamanda
--check_up_to_date
davranışı.
Bu seçenek, göndermeden önce yapılacak kontroller için yararlı olabilir.
--test_verbose_timeout_warnings
Bu seçenek, bir testin zaman aşımı süresi aşılırsa Bazel'a kullanıcıyı açıkça uyarmasını söyler , testin gerçek yürütme süresinden önemli ölçüde daha uzundur. Bir testin zaman aşımı, kesintisiz olacak şekilde ayarlanmalıdır. Ancak çok fazla zaman aşımı olan bir test, beklenmedik şekilde ortaya çıkan gerçek sorunları gizleyebilir.
Örneğin, normalde bir veya iki dakika içinde yürütülen bir testin, zaman aşımına uğratılması (çok, çok cömert)
Bu seçenek, kullanıcıların iyi bir zaman aşımı değerine karar vermesine veya mevcut zaman aşımı değerlerini kontrol etmesine yardımcı olmak için kullanışlıdır.
--[no]test_keep_going
Varsayılan olarak tüm testler sonuna kadar çalıştırılır. Ancak bu işaret devre dışı bırakılırsa geçemeyen tüm testlerde derleme iptal edilir. Sonraki derleme adımları
ve test çağrıları çalıştırılmaz ve yayındaki çağrılar iptal edilir.
Hem --notest_keep_going
hem de --keep_going
belirtilmemelidir.
--flaky_test_attempts=attempts
Bu seçenek, bir testin maksimum kaç kez denenebileceğini belirtir
herhangi bir nedenle başarısız olursa Başlangıçta başarısız olan ancak sonunda
başarı değerleri test özetinde FLAKY
olarak raporlanır. Evet,
bununla birlikte, Bazel çıkış kodunun tanımlanması konusunda iletildiği kabul edilir.
ya da geçilen testlerin toplam sayısını
görmenizi sağlar. İzin verilen tüm denemelerde başarısız olan testler:
bu projenin başarısız olduğu kabul edilir.
Varsayılan olarak (bu seçenek belirtilmediğinde veya
varsayılan), normal testler için yalnızca tek bir denemeye izin verilir ve
flaky
özellik ayarlanmış test kuralları için 3. Tekliflerinizi otomatikleştirmek ve optimize etmek için
maksimum test denemesi sınırını geçersiz kılmak için bir tam sayı değeri. Bazel, sistemin kötüye kullanımını önlemek için en fazla 10 test denemesine izin verir.
--runs_per_test=[regex@]number
Bu seçenek, her bir testin kaç kez çalıştırılacağını belirtir. Tümü test yürütmeleri ayrı testler olarak kabul edilir (yedek işlevsellik her biri için ayrı ayrı uygulanacaktır).
Başarısız çalıştırmaları olan bir hedefin durumu, --runs_per_test_detects_flakes
işaretinin değerine bağlıdır:
- Yoksa başarısız çalıştırmalardan biri, testin tamamının başarısız olmasına neden olur.
- Aynı parçayı döndüren iki çalıştırma PASS ve FAIL (başarılı ve başarısız) durumundaysa test diğer başarısız çalıştırmalar nedeniyle başarısız).
Tek bir sayı belirtilirse tüm testler o sayı kadar yürütülür.
Alternatif olarak, normal ifade, söz dizimi kullanılarak belirtilebilir
normal ifade@numara'ya dokunun. Bu, --runs_per_test
'ün normal ifadeyle eşleşen hedefler üzerindeki etkisini kısıtlar (--runs_per_test=^//pizza:.*@4
, tüm testleri //pizza/
altında 4 kez çalıştırır).
Bu --runs_per_test
biçimi birden fazla kez belirtilebilir.
--[no]runs_per_test_detects_flakes
Bu seçenek belirtilirse (varsayılan olarak seçili değildir) Bazel,
parçaları --runs_per_test
tarihine kadar test edin. Tek bir kırıkta bir veya daha fazla çalışırsa
başarısız olursa ve aynı parça geçişi için bir veya daha fazla
bayrakla stabil değildir. Belirtilmemişse hedef başarısız durum raporlar.
--test_summary=output_style
Test sonucu özetinin nasıl gösterileceğini belirtir.
short
, her testin sonuçlarını ve test başarısız olursa test çıktısını içeren dosyanın adını yazdırır. Bu, varsayılan ayardır değer.terse
short
gibidir ancak daha kısadır: Yalnızca başarısız olan testlerle ilgili bilgileri yazdırır.detailed
, başarısız olan her test durumunu yazdırır, her test için mevcut olmayabilir. Test çıkış dosyalarının adları atlanır.none
test özetini yazdırmıyor.
--test_output=output_style
Test çıktısının nasıl gösterileceğini belirtir:
summary
, her testin başarılı olup olmadığına ilişkin bir özet gösterir. başarısız oldu. Ayrıca, başarısız testlerin çıkış günlük dosyası adını gösterir. Özet üretilirken (derleme sırasında test başladığında, başarılı veya başarısız olduğunda gösterilen basit ilerleme mesajları). Bu, varsayılan davranıştır.errors
, başarısız testlerden birleştirilmiş stdout/stderr çıkışını gönderir test tamamlandıktan hemen sonra stdout'a gönderilir. Böylece, Eş zamanlı testlerden elde edilen test çıktıları birbiriyle aralıklı olarak ilişkilendirilmiş olmamalıdır. Yukarıdaki özet çıktısına göre derleme sırasında bir özet yazdırır.all
,errors
ile benzer ancak çıktıyı şunun için yazdırıyor: tüm testler dahildir.streamed
, her testin stdout/stderr çıkışını gerçek zamanlı olarak aktarır.
--java_debug
Bu seçenek, Java testinin Java sanal makinesinin
Testi başlatmadan önce JDWP uyumlu hata ayıklayıcı. Bu seçenek --test_output=streamed
anlamına gelir.
--[no]verbose_test_summary
Varsayılan olarak bu seçenek etkindir. Bu durumda, test süreleri ve diğer ek bilgiler (test denemeleri gibi) 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 dizin içindeki ayrı bir alt dizinde yürütülür. Dizin, her bazel test
komutunun başında temizlenir.
Varsayılan olarak, bazel bu dizini Bazel çıkış temel dizininin altına yerleştirir.
--test_timeout=seconds
VEYA --test_timeout=seconds,seconds,seconds,seconds
Yeni zaman aşımı değeri olarak belirtilen saniye sayısını kullanarak tüm testler için zaman aşımı değerini geçersiz kılar. Yalnızca tek bir değer sağlanırsa tüm test zaman aşımı kategorileri için kullanılabilir.
Alternatif olarak, testler için bağımsız zaman aşımları (kullanıcının sipariş). Her iki biçimde de, test boyutlarının herhangi biri için sıfır veya negatif bir değer, belirtilen zaman aşımı kategorileri için varsayılan zaman aşımıyla değiştirilir Testler Yazma sayfasında tanımlanmıştır. Varsayılan olarak Bazel, boyutun dolaylı veya açıkça ayarlanmış olup olmadığına bakılmaksızın, zaman aşımı sınırını testin boyutundan çıkararak tüm testler için bu zaman aşımlarını kullanır.
Zaman aşımı kategorisini boyutundan farklı olarak açıkça belirten testler, zaman aşımı boyut etiketi tarafından dolaylı olarak ayarlanmış gibi aynı değeri alır. Dolayısıyla, "uzun" bir zaman aşımı belirten "küçük" boyutlu bir test, açık bir zaman aşımı olmayan "büyük" testlerin sahip olduğu etkili zaman aşımına sahip olur.
--test_arg=arg
Her test işlemine komut satırı seçeneklerini/bayrakları/bağımsız değişkenleri geçirir. Bu
seçeneği, birkaç 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
'te olduğu gibi iletemeyeceğinizi unutmayın. Bunun nedeni, bazel test
işlevine iletilen ek 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, bazel run
komutu için yoktur;
bir hedef kabul eder.
--test_arg
, bazel run
komutuna iletilebilir ancak
çalıştırılmakta olan hedef bir test hedefidir. (Diğer tüm flag'lerde olduğu gibi,
bazel run
komutu, --
jetonundan sonra kullanılır, Bazel tarafından işlenmez ancak
doğrudan yürütülen hedefe iletilmelidir.)
--test_env=variable=_value_
VEYA --test_env=variable
Her test için test ortamına eklenmesi gereken ek değişkenleri belirtir. value belirtilmezse
bazel test
öğesini başlatmak için kullanılan kabuk ortamından devralındı
komutunu kullanın.
Ortama test içinden erişilebilir.
System.getenv("var")
(Java), getenv("var")
(C veya C++),
--run_under=command-prefix
Bu, test çalıştırıcısının test komutunu çalıştırmadan önce komutun önüne ekleyeceği bir ön eki belirtir. İlgili içeriği oluşturmak için kullanılan command-prefix, Bourne kabuğu kullanılarak kelimelere bölündü jetonlara ayırma kuralları daha sonra, kelime listesi komutun çalıştırılacağı anlamına gelir.
İlk kelime tam nitelikli bir etiketse (//
ile başlar) oluşturulur. Ardından etiket, diğer kelimelerle birlikte yürütülecek komutun başına eklenen ilgili yürütülebilir konumla değiştirilir.
Dikkat edilmesi gereken bazı noktalar:
- Test çalıştırmak için kullanılan PATH, ortamınızdaki PATH'ten farklı olabilir. Bu nedenle,
--run_under
komutu (command-prefix'taki ilk kelime) için mutlak yol kullanmanız gerekebilir. stdin
bağlı değil, bu nedenle--run_under
kullanılamaz.
Örnekler:
--run_under=/usr/bin/strace --run_under='/usr/bin/strace -c' --run_under=/usr/bin/valgrind --run_under='/usr/bin/valgrind --quiet --num-callers=20'
Seçimi test et
Çıkış seçimi seçenekleri altında açıklandığı gibi testleri boyuta, zaman aşımı, tag veya dil. Kolaylık sağlayan bir genel ad filtresi, belirli filtre bağımsız değişkenlerini test çalıştırıcısına iletebilir.
bazel test
için diğer seçenekler
Söz dizimi ve diğer seçenekler tam olarak bazel build
ile aynıdır.
Yürütülebilir dosyaları çalıştırma
bazel run
komutu, tek bir hedefi oluşturmak ve çalıştırmak için kullanılması dışında bazel build
komutuna benzer. Aşağıda tipik bir oturum verilmiştir (//java/myapp:myapp
merhaba der ve args parametresini yazdırır):
% 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 çağırmaya benzer ancak aynı değildir
ve Bazel tarafından derlenen ikili program ve bunların davranışı,
ikili değer bir test olup olmadığını kontrol eder.
İkili program bir test değilse geçerli çalışma dizini ikili dosyanın Runfiles ağacı.
İkili program bir test olduğunda, mevcut çalışma dizini exec kökü olur.
ve aynı zamanda ortam testlerini tekrarlamak için iyi niyetli bir girişimde bulunulduğunda
biraz zorlanır. Ancak bu emülasyon mükemmel değildir ve birden fazla bölüme sahip testler bu şekilde çalıştırılamaz (bu sorunu gidermek için --test_sharding_strategy=disabled
komut satırı seçeneği kullanılabilir).
Aşağıdaki ekstra ortam değişkenleri de ikili program tarafından kullanılabilir:
BUILD_WORKSPACE_DIRECTORY
: geliştirmenizi sağlar.BUILD_WORKING_DIRECTORY
: Buradaki mevcut çalışma dizini Bazel kaynağı çalıştırıldı.
Bunlar, örneğin, komut satırındaki dosya adlarını bir hale getirmek istiyoruz.
bazel run
için seçenekler
--run_under=command-prefix
Bu, bazel test
için --run_under
seçeneğiyle aynı etkiye sahiptir (yukarıya bakın). Bununla birlikte, bazel test
tarafından çalıştırılan testler yerine bazel
run
tarafından çalıştırılan komut için geçerlidir ve etiket altında çalıştırılamaz.
Bazel'den günlük çıkışlarını filtreleme
bazel run
ile bir ikili program çağırırken Bazel, Bazel'den günlük kaydı çıktısını yazdırır
kendisi ve çağrıdaki ikili program. Günlükleri daha az karmaşık hale getirmek için --ui_event_filters
ve --noshow_progress
işaretlerini kullanarak Bazel'in çıkışlarını engelleyebilirsiniz.
Örneğin:
bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp
Testleri yürütme
bazel run
, test ikili programlarını da yürütebilir. Bu da
belirtilen ortama yakın bir yakınlıkta test ederek
Testler Yazma. Yukarıdakilerden hiçbirinin
Test, bu şekilde çalıştırıldığında --test_*
bağımsız değişkeni etkilidir:
--test_arg
Derleme çıkışlarını temizleme
clean
komutu
Bazel'in, Make komutuna benzer bir clean
komutu vardır.
Bu Bazel örneği tarafından gerçekleştirilen tüm derleme yapılandırmalarının çıkış dizinlerini veya bu Bazel örneği tarafından oluşturulan çalışma ağacının tamamını siler ve dahili önbellekleri sıfırlar. Herhangi bir
komut satırı seçeneklerini, ardından tüm yapılandırmalar için çıkış dizinini
temizlenecek.
Her Bazel örneğinin tek bir çalışma alanıyla ilişkilendirildiğini ve bu nedenle
clean
komutu, yaptığınız tüm derlemelerdeki tüm çıkışları siler
Bazel örneğiyle birlikte gönderebilirsiniz.
Bir Bazel örneği tarafından oluşturulan çalışma ağacının tamamını kaldırmak için --expunge
seçeneğini belirtebilirsiniz. Zaman
--expunge
ile yürütüldükten sonra temiz komutun
Tüm çıktı temel ağacını kaldırır ve bu, derlemeye ek olarak
çıkış, Bazel tarafından oluşturulan tüm geçici dosyaları içerir. Ayrıca, temizleme işleminden sonra Bazel sunucusunu durdurur. Bu, shutdown
komutuna eşdeğerdir. Örneğin, bir Bazel örneğinin tüm disk ve bellek izlerini temizlemek için şunları belirtebilirsiniz:
% bazel clean --expunge
Alternatif olarak, şunu kullanarak arka planda kalıcı olarak silebilirsiniz:
--expunge_async
Bazel komutunu çağırmak güvenli
işleminize devam edecektir.
clean
komutu, birincil olarak
artık ihtiyaç duyulmayan çalışma alanları için disk alanı elde etme.
Bazel'in artımlı yeniden oluşturma işlemleri 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üzeltilebilir olmasına ve bu hataların düzeltilmesinin yüksek öncelikli olmasına olanak tanır. Yanlış bir artımlı derleme bulursanız hata raporu gönderin ve clean
yerine araçları kullanarak hataları bildirin.
Bağımlılık grafiğini sorgulama
Bazel, derleme sırasında kullanılan bağımlılık grafiği hakkında soru sormak için bir sorgu dili içerir. Sorgu dili iki komut tarafından kullanılır: sorgu ve cquery. Temel kavramlar arasındaki iki komut, sorgunun yükleme aşamasından sonra çalıştırılmasıdır. ve sorgu analiz aşamasından sonra çalıştırılır. Bu araçlar birçok yazılım mühendisliği görevi için paha biçilmez bir yardımcıdır.
Sorgu dili, grafikler üzerinde cebirsel işlemler fikrine dayanır ve
Bazel Sorgu Referansı. Lütfen referans için bu dokümana bakın: örnekleri ve sorguya özgü komut satırı seçenekleri.
Sorgu aracı, çeşitli komut satırı seçeneklerini kabul eder. --output
, çıkış biçimini seçer.
--[no]keep_going
(varsayılan olarak devre dışıdır), sorgu aracının hata oluştuğunda ilerlemeye devam etmesine neden olur. Hata durumunda eksik bir sonuç kabul edilemiyorsa bu davranış devre dışı bırakılabilir.
Varsayılan olarak etkinleştirilen --[no]tool_deps
seçeneği, hedef olmayan yapılandırmalardaki bağımlılıkların, sorgunun çalıştığı bağımlılık grafiğine dahil edilmesine neden olur.
Varsayılan olarak etkinleştirilmiş olan --[no]implicit_deps
seçeneği,
sorgunun çalıştığı bağımlılık grafiğine dahil edilecek örtülü bağımlılıkları belirler.
örtülü bağımlılık, BUILD dosyasında açıkça belirtilmeyen bir bağımlılıktır
ancak bazel tarafından eklenir.
Örnek: "PEBL ağacındaki tüm testleri derlemek için gereken tüm genrules tanımlarının (BUILD dosyalarında) konumlarını göster."
bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'
İşlem grafiğini sorgulama
aquery
komutu, derleme grafiğinizde işlemler için sorgu göndermenize olanak tanır.
Analiz sonrası yapılandırılan hedef grafiği üzerinde çalışır ve
eylemler, eserler ve bunların ilişkilerine dair bilgi sağlar.
Araç, çeşitli komut satırı seçeneklerini kabul eder.
--output
, çıkış biçimini seçer. Varsayılan çıkış biçimi
(text
) kullanıcılar tarafından okunabilir, şunun için proto
veya textproto
kullanın:
okunabilir bir biçime sahip olmasına dikkat edin.
Ayrıca, aquery komutu normal bir Bazel derlemesinin üzerinde çalışır ve
sunulan seçeneklerdir.
Geleneksel query
'te de kullanılabilen aynı işlev grubunu destekler ancak siblings
, buildfiles
ve tests
'te de kullanılabilir.
Daha ayrıntılı bilgi için İşlem Grafiği Sorgusu bölümüne bakın.
Çeşitli komutlar ve seçenekler
help
help
komutu, online yardım sunar. Varsayılan olarak
şurada gösterildiği gibi kullanılabilir komutların ve yardım konularının bir özetini gösterir:
Bazel ile geliştirme.
Bir bağımsız değişken belirtmek, belirli bir bağımsız değişken için
konu. Konuların çoğu build
veya query
gibi Bazel komutlarıdır ancak komutlara karşılık gelmeyen bazı ek yardım konuları da vardır.
--[no]long
(-l
)
Varsayılan olarak, bazel help [topic]
yalnızca
bir konuyla alakalı seçeneklerin özetini içerir. Eğer
--long
seçeneği belirtildiğinde, tür, varsayılan değer
ve her seçeneğin tam açıklaması da yazdırılır.
shutdown
Bazı sunucu işlemleri shutdown
komutu kullanılarak durdurulabilir. Bu komut, Bazel sunucusunun hemen çıkmasıyla
boşta kalır (örneğin, herhangi bir derlemenin tamamlanmasından veya
komutlarının ikisinde birden) kullanılabilir. Daha fazla bilgi için İstemci/sunucu uygulaması başlıklı makaleyi inceleyin.
Bazel sunucuları, boşta kalma zaman aşımı süresinden sonra kendilerini durdurur. Bu nedenle bu komut nadiren gereklidir. Ancak belirli bir çalışma alanında başka derleme yapılmayacağı bilindiğinde komutlar için yararlı olabilir.
shutdown
bir kabul ediyor
--iff_heap_size_greater_than _n_
. seçenek,
bir tamsayı bağımsız değişkeni gerektirir (MB cinsinden). Belirtilirse bu, cihazın kapanmasına
tüketilen bellek miktarına bağlıdır. Bazel sunucusunda meydana gelen bellek sızıntıları, sunucunun zaman zaman yanlışlıkla kilitlenmesine neden olabileceğinden, bu özellik çok sayıda derleme başlatan komut dosyaları için kullanışlıdır. Koşullu yeniden başlatma işlemi, bu durumu önler.
info
info
komutu, Bazel sunucu örneğiyle veya belirli bir derleme yapılandırmasıyla ilişkili çeşitli değerleri yazdırır.
(Bunlar, derlemeyi yöneten komut dosyaları tarafından kullanılabilir.)
info
komutu ayrıca tek bir (isteğe bağlı)
bağımsız değişkeni, aşağıdaki listede bulunan anahtarlardan birinin adıdır.
Bu durumda bazel info key
yalnızca söz konusu anahtarın değerini yazdırır. (Bu yöntem, özellikle de
sonucu aktarma ihtiyacını ortadan kaldırdığı için Bazel komut dosyası yazma
sed -ne /key:/s/key://p
tarihine kadar:
Yapılandırmadan bağımsız veriler
release
: bu Bazel'in yayın etiketi "geliştirme sürümü" TV'de yayınlanmayan ikilik.workspace
Ana çalışma alanı dizininin mutlak yolu.install_base
: Mevcut kullanıcı için bu Bazel örneği tarafından kullanılan yükleme dizininin mutlak yolu. Bazel, dahili olarak gerekli olan yürütülebilir dosyalarını bu dizinin altına yükler.output_base
: temel çıkışın mutlak yolu geçerli kullanıcı için bu Bazel örneği tarafından kullanılan dizin birçok yolu vardır. Bazel, tüm sıfırdan ve derleme çıkışlarını bu dizinin altına yerleştirir.execution_root
: output_base altındaki yürütme kök dizininin mutlak yolu. Bu dizin tüm dosyaların kök dizinidir. çalıştırma sırasında çalıştırılan komutlar tarafından erişilebilir ve dizini oluşturun. Çalışma alanı dizini yazılabilirsebazel-<workspace>
adlı sembolik bağlantı buraya bu dizini işaret edecek şekilde yerleştirilir.output_path
: çıkışın mutlak yolu aslında tüm dosyalar için kullanılan yürütme kökünün altındaki dizin bir sonucu olarak oluşturulur. Çalışma alanı dizini yazılabilir,bazel-out
adında bir sembolik bağlantı buraya yerleştirilmiş bu dizine ekleyebilirsiniz.server_pid
: Bazel sunucusunun işlem kimliği bahsedeceğim.server_log
: Bazel sunucusunun hata ayıklama günlük dosyasının mutlak yolu. Bu dosya, Bazel sunucusunun kullanım süresi boyunca tüm komutlar için hata ayıklama bilgilerini içerir ve Bazel geliştiricileri ile ileri düzey kullanıcılar tarafından okunmak üzere tasarlanmıştır.command_log
: Komut günlük dosyasının mutlak yolu; Bu, en yeni Bazel komutu.bazel info
çalıştırıldığında, bu dosyanın tüm içeriklerine uygulanır. Çünkü dosya, en son Bazel komutu haline gelir. Ancak--output_base
veya--output_user_root
seçeneklerinin ayarını değiştirmediğiniz sürece komut günlüğü dosyasının konumu değişmez.used-heap-size
committed-heap-size
,max-heap-size
: çeşitli JVM yığın boyutlarını bildirir parametreleridir. Sırasıyla: şu anda kullanılan bellek, JVM'nin sistemden kullanabileceği garanti edilen bellek, mümkün olan maksimum ayırma.gc-count
,gc-time
: Şu öğelerin kümülatif sayısı: başlangıcından bu yana toplanan çöp toplama verileri ve harcanan zaman nasıl kullanacağınızı göstereceğim. Bu değerlerin her derlemenin başında sıfırlanmadığını unutmayın.package_path
: İzlenecek yolların iki nokta üst üste ile ayrılmış listesi bazel'e göre paket aradı.--package_path
derleme komut satırı bağımsız değişkeniyle aynı biçime sahiptir.
Örnek: Bazel sunucusunun işlem kimliği.
% bazel info server_pid 1285
Yapılandırmaya özgü veriler
Bu veriler, iletilen yapılandırma seçeneklerinden etkilenebilir
bazel info
adlı gruba, şunun için:
örnek --cpu
, --compilation_mode
,
vb. info
komutu, tüm projeniz için
bağımlılığı kontrol eden seçenekler
çünkü bunlardan bazıları müşterinin konumunu belirlediğinden,
derlemenin çıkış dizini, derleyici seçimi vb.
bazel-bin
,bazel-testlogs
,bazel-genfiles
: Derleme tarafından oluşturulan programların bulunduğubazel-*
dizinlerinin mutlak yolunu bildirir. Bu, her zaman olmasa da genellikle başarılı bir derleme sonrasında ana Workspace dizininde oluşturulanbazel-*
sembolik bağlantılarıyla aynıdır. Ancak çalışma alanı dizini salt okunur durumdaysabazel-*
sembolik bağlantısı oluşturulamaz. Belgenizdebazel info
tarafından bildirilen değer mevcut olması daha sağlam olacaktır.- Eksiksiz
"Yap" ortam.
--show_make_env
işareti belirtildi, mevcut yapılandırmanın "Make" ortam (CC
,GLIBC_VERSION
vb.) de gösterilir. Bunlar, BUILD dosyalarında$(CC)
veyavarref("CC")
söz dizimi kullanılarak erişilen değişkenlerdir.
Örnek: Mevcut yapılandırma için C++ derleyicisi.
Bu, "Make" (Yap) sütunundaki $(CC)
değişkenidir. ortam,
bu nedenle --show_make_env
işareti gerekir.
% bazel info --show_make_env -c opt COMPILATION_MODE opt
Örnek: geçerli için bazel-bin
çıkış dizini
yapılandırma. Şu durumlarda bile doğru olacaktır:
bazel-bin
sembolik bağlantısı bir nedenden dolayı oluşturulamıyor
(örneğin, salt okunur bir dizinden derleme yapıyorsanız).
% bazel info --cpu=piii bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin % bazel info --cpu=k8 bazel-bin /var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin
version
ve --version
Sürüm komutu, derlenen Bazel hakkındaki sürüm ayrıntılarını yazdırır değişiklik listesi ve tarih de dahil olmak üzere her iki ikili programı da kapsar. Bu raporlar, en güncel bilgilere sahip olup olmadığınızı hata bildiriyorsanız bu sayfayı inceleyin. İlginç değerlerden bazıları şunlardır:
changelist
: Bazel'in bu sürümünün yayınlandığı değişiklik listesi.label
: Bu Bazel örneğinin sürüm etiketi veya yayınlanmış bir ikili dosya değilse "geliştirme sürümü". Hata bildirme sürecinde çok faydalıdır.
bazel --version
, başka bağımsız değişkeni olmadan
bazel version --gnu_format
,
sunucu arşivini açmanız gerekir. bazel --version
şuradan çalıştırılabilir:
herhangi bir yerde çalışır. Çalışma alanı dizini gerektirmez.
mobile-install
mobile-install
komutu uygulamaları mobil cihazlara yükler.
Şu anda yalnızca ART çalıştıran Android cihazlar desteklenmektedir.
Daha fazla bilgi için bazel mobile-install (bazel mobil yükleme) sayfasına bakın.
Aşağıdaki seçenekler desteklenir:
--incremental
Bu ayar etkinleştirilirse Bazel, uygulamayı artımlı olarak (yani yalnızca son derlemeden bu yana değişen bölümleri) yüklemeye çalışır. Bu işlem, AndroidManifest.xml
'ten, yerel koddan veya Java kaynaklarından (Class.getResource()
tarafından referans verilenler gibi) referans verilen kaynakları güncelleyemez. Bu öğeler değişirse bu seçenek atlanmalıdır. Bazel'in ruhuna aykırı olarak ve Android platformunun sınırlamaları nedeniyle, bu komutun ne zaman yeterli olduğunu ve ne zaman tam yükleme gerektiğini bilmek kullanıcı sorumluluğundadır.
Marshmallow veya sonraki sürümlerin yüklü olduğu bir cihaz kullanıyorsanız --split_apks
işaretini kullanabilirsiniz.
--split_apks
Uygulamayı cihaza yüklemek ve güncellemek için bölünmüş apk'lerin kullanılıp kullanılmayacağı.
Yalnızca Marshmallow veya sonraki sürümlerin yüklü olduğu cihazlarda çalışır. Lütfen
--incremental
işaret
--split_apks
kullanılırken gerekli değildir.
--start_app
Uygulamayı yükledikten sonra temiz bir durumda başlatır. --start=COLD
etiketine eş değer.
--debug_app
Yükleme işleminden sonra uygulamayı temiz durumda başlatmadan önce hata ayıklayıcının eklenmesini bekler.
--start=DEBUG
etiketine eş değer.
--start=_start_type_
Uygulamanın yüklendikten sonra nasıl başlatılması gerektiği. Desteklenen _start_type_ler şunlardır:
NO
Uygulamayı başlatmaz. Bu, varsayılan ayardır.COLD
Yükleme işleminden sonra uygulamayı temiz durumdan başlatır.WARM
Artımlı yüklemelerde uygulama durumunu korur ve geri yükler.DEBUG
Yüklemeden sonra uygulamayı temiz bir durumda başlatmadan önce hata ayıklayıcıyı bekler.
--adb=path
Kullanılacak adb
ikili programını gösterir.
Varsayılan ad,
--android_sdk
.
--adb_arg=serial
adb
için fazladan bağımsız değişkenler. Bunlar,
komut satırından başlar 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
işlevi şu şekilde çağrılır:
adb -s deadbeef install ...
--incremental_install_verbosity=number
Artımlı yükleme için ayrıntı düzeyi. Hata ayıklama günlüklerinin konsola yazılması için 1 değerine ayarlayın.
dump
dump
komutu,
Bazel sunucusunun dahili durumunu kontrol edin. Bu komutun temel amacı Bazel geliştiricileri tarafından kullanılmasıdır. Bu nedenle, bu komutun çıkışı belirtilmez ve değişiklik gösterebilir.
Varsayılan olarak komut, Bazel durumunun belirli alanlarını dökmek için kullanılabilecek seçenekleri açıklayan bir yardım mesajı yazdırır. Dahili durumu dökmek için seçeneklerden en az biri belirtilmelidir.
Aşağıdaki seçenekler desteklenir:
--action_cache
, işlem önbellek içeriğini döküm haline getirir.--packages
, paket önbellek içeriğini atar.--skyframe
, dahili Bazel bağımlılık grafiğinin durumunu dökümü alır.--rules
, sayılar ve işlem sayıları dahil olmak üzere her kural ve görünüm sınıfı için kural özetini dökümü yapar. Buna hem yerel hem de Starlark kuralları dahildir. Bellek takibi etkinse kuralların bellek tüketimi de yazdırılır.--skylark_memory
, belirtilen yola pprof uyumlu bir .gz dosyası döker. Bunun çalışması için bellek izlemeyi etkinleştirmeniz gerekir.
Bellek izleme
Bazı dump
komutları bellek izlemeyi gerektirir. Bu özelliği etkinleştirmek için:
başlangıç bayraklarını Bazel'a ilet:
--host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
--host_jvm_args=-DRULE_MEMORY_TRACKER=1
Java-aracı, Bazel'daki şu adreste kontrol edilir:
third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
, bu nedenle
Bazel deponuzu sakladığınız yere göre $BAZEL
değerini ayarladığınızdan emin olun.
Her komutta bu seçenekleri Bazel'a iletmeyi unutmayın. Aksi halde sunucu yeniden başlat.
Örnek:
% bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ build --nobuild <targets> # Dump rules % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --rules # Dump Starlark heap and analyze it with pprof % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \ --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \ dump --skylark_memory=$HOME/prof.gz % pprof -flame $HOME/prof.gz
analyze-profile
analyze-profile
komutu, komut dosyasının
Daha önce JSON izleme profili
toplanan kişiselleştirilmiş sonuçlar.
canonicalize-flags
canonicalize-flags
komutuna basın. Bu komut, Bazel komutuna ilişkin seçeneklerin listesini alır ve
aynı etkiye sahip seçeneklerdir. Yeni seçenek listesi standarttır. Örneğin, aynı etkiye sahip iki seçenek listesi aynı yeni listeyle standartlaştırılır.
--for_command
seçeneği, farklı komutlar arasında seçim yapmak için kullanılabilir. Şu anda yalnızca build
ve test
desteklenir. Belirtilen komutun desteklemediği seçenekler hataya neden olur.
Örnek olarak:
% bazel canonicalize-flags -- --config=any_name --test_tag_filters="-lint" --config=any_name --test_tag_filters=-lint
Başlangıç seçenekleri
Bu bölümde açıklanan seçenekler, Bazel sunucu işlemi tarafından kullanılan Java sanal makinesinin başlatılmasını etkiler ve bu sunucu tarafından işlenen sonraki tüm komutlar için geçerlidir. Ç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 dizimine uygun olmalıdır. Ayrıca bu seçenekler, Bazel komutunun adından önce görünmelidir. Bunları bir .bazelrc
dosyasında listelemek için startup --key=value
kullanın.
--output_base=dir
Bu seçenek, yazılabilir dizindir. Bazel, tüm bilgilerini yazmak için bu konumu çıktı. Çıkış tabanı aynı zamanda istemcinin giriş yaparken Bazel sunucusu. Çıkış tabanını değiştirerek komutu işleyen sunucuyu değiştirirsiniz.
Varsayılan olarak çıkış tabanı, kullanıcının giriş adından ve Workspace dizininin adından (aslında MD5 özeti) türetilir. Bu nedenle, tipik bir değer şöyle görünür:
/var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e
.
Örneğin:
OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base % bazel --output_base ${OUTPUT_BASE}1 build //foo & bazel --output_base ${OUTPUT_BASE}2 build //bar
Bu komutta, iki Bazel komutu eşzamanlı olarak çalışır (çünkü
kabuk &
operatörü), her biri farklı bir Bazel kullanarak
örneği (farklı çıkış tabanları nedeniyle).
Buna karşın her iki komutta da varsayılan çıkış tabanı kullanıldıysa
her iki istek de aynı sunucuya gönderilir. Bu da
sıralı olarak ele alın: önce //foo
, ardından
artımlılık artışıyla //bar
.
--output_user_root=dir
Çıktı ve yükleme temellerinin oluşturulduğu kök dizini gösterir. Dizin mevcut olmamalı veya arayan kullanıcıya ait olmalıdır. Önceden bu özelliğin çeşitli kullanıcılar arasında paylaşılan bir dizine işaret etmesine izin veriliyordu ancak artık buna izin verilmiyor. 11100 numaralı sorun giderildikten sonra buna izin verilebilir.
--output_base
seçeneği belirtilirse çıkış tabanını hesaplamak için --output_user_root
kullanılması geçersiz kılınır.
Yükleme tabanı konumu, --output_user_root
ve Bazel yerleşik ikili dosyalarının MD5 kimliğine göre hesaplanır.
Dosya sistemi düzeninizde daha iyi bir konum varsa Bazel'in tüm çıkışı (yükleme tabanı ve çıkış tabanı) için alternatif bir temel konum seçmek üzere --output_user_root
seçeneğini kullanabilirsiniz.
--server_javabase=dir
Bazel'in 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, Bazel komutlarından önce görünmelidir. Örneğin:
% bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo
Bu işaret, Bazel alt işlemleri tarafından kullanılan uygulamalar, testler, araçlar vb. Derleme seçeneklerini kullanın: --javabase veya --host_javabase kullanın.
Bu işaret daha önce --host_javabase
(bazen "sol taraftaki" --host_javabase
olarak adlandırılır) olarak adlandırılıyordu ancak derleme işareti --host_javabase (bazen "sağ taraftaki" --host_javabase
olarak adlandırılır) ile karışıklık olmaması için yeniden adlandırıldı.
--host_jvm_args=string
Bazel'in bulunduğu Java sanal makinesine iletilecek bir başlangıç seçeneğini belirtir koşar. Bu, yığın boyutunu ayarlamak için kullanılabilir. Örneğin:
% bazel --host_jvm_args="-Xss256K" build //foo
Bu seçenek, bağımsız değişkenlerle birden çok kez kullanılabilir. Bu işaretin ayarlanmasına nadiren ihtiyaç duyulacağını unutmayın. Ayrıca, her biri ayrı bir JVM bağımsız değişkeni olarak yorumlanacak, boşlukla ayrılmış bir dize listesi de iletebilirsiniz. Ancak bu özellik yakında kullanımdan kaldırılacaktır.
Bu durumun
alt işlemleri: uygulamalar, testler, araçlar vb. bazel
run
tarafından veya komut satırında çalıştırılan yürütülebilir Java programlarına JVM seçeneklerini iletmek için tüm java_binary
ve java_test
programlarının desteklediği --jvm_flags
bağımsız değişkenini kullanmanız gerekir. Alternatif olarak, testler için bazel test --test_arg=--jvm_flags=foo ...
seçeneğini kullanabilirsiniz.
--host_jvm_debug
Bu seçenek, Java sanal makinesinin Bazel'in ana yöntemini çağırmadan önce JDWP uyumlu bir hata ayıklayıcıdan bağlantı beklemesine neden olur. Bu birincil olarak kullanım için tasarlanmıştır.
--autodetect_server_javabase
Bu seçenek, Bazel'in başlangıçta yüklü bir JDK'yı otomatik olarak aramasına
ve yerleştirilmiş JRE mevcut değilse yüklü JRE'ye geri döner.
--explicit_server_javabase
, kullanılacak belirli bir JRE seçmek için kullanılabilir
çalıştırmanız için bir fırsattır.
--batch
Toplu mod, Bazel'in standart istemci/sunucu modu vardır, ancak bunun yerine bir bazel çalıştırır tek bir komut için Java işlemi sunar. Bu işlem, sinyal işleme, iş kontrolü ve ortam ile ilgili anlamlar değişkeni devralmadır ve Chrome'da bazel çalıştırmak için gereklidir.
Toplu modu, aynı çıkış_tabanı içinde uygun sıraya alma anlamını korur. Yani eşzamanlı çağrılar, çakışma olmadan sırayla işlenir. Bazel toplu modu, çalışan bir sunucuya sahip bir istemcide çalıştırılıyorsa önce 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 şeylerin yanı sıra, derleme dosyası önbelleğinin bellekte kalmasıdır. Dolayısıyla, otomatik çağrılarla korunduğundan emin olun. Bu nedenle, toplu modu kullanmak genellikle performansın daha az kritik olduğu durumlarda (ör. sürekli derlemeler) daha mantıklı olur.
--max_idle_secs=n
Bu seçenek, Bazel sunucu sürecinin son istemci isteğinden sonra çıkmadan önce saniye cinsinden ne kadar süre beklemesi gerektiğini belirtir. Varsayılan değer 10.800 (3 saat) şeklindedir. --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
bir kullanıcı makinesinde Bazel sunucusundaki işlemleri bırakmazlar.
çalışmazdı.
Örneğin, bir ön gönderme komut dosyası
bir kullanıcının beklemede olduğundan emin olmak için bazel query
yöntemini çağırın
istenmeyen bağımlılıklar yaratmaz. Ancak kullanıcı bu çalışma alanında yakın zamanda bir derleme yapmadıysa göndermeden önce komut dosyasının, günün geri kalanında boşta kalması için bir Bazel sunucusu başlatması istenmez.
Sorgu isteğinde küçük bir --max_idle_secs
değeri belirterek komut dosyası, yeni bir sunucunun başlatılmasına neden olursa bu sunucunun hemen çıkmasını sağlayabilir. Bunun yerine zaten çalışan bir sunucu varsa bu sunucu, normal süre boyunca boşta kalana kadar çalışmaya devam eder. Elbette mevcut sunucunun boş zamanlayıcısı sıfırlanır.
--[no]shutdown_on_low_sys_mem
Etkinleştirilirse ve --max_idle_secs
pozitif bir süreye ayarlanırsa derleme sunucusu bir süre boşta kaldıktan sonra, sistemde bellek azaldığında sunucuyu kapatın. Yalnızca Linux.
max_idle_secs değerine karşılık gelen bir boşta kalma kontrolü çalıştırmaya ek olarak, derleme sunucusu sunucu bir süre boşta kaldıktan sonra kullanılabilir sistem belleğini izlemeye başlar. Kullanılabilir sistem belleği kritik düzeyde düşük olursa sunucu kapanır.
--[no]block_for_lock
Etkinleştirilirse Bazel, devam etmeden önce sunucu kilidini tutan diğer Bazel komutlarının tamamlanmasını bekler. Devre dışı bırakılırsa Bazel kilidi hemen edinemezse yanlışlıkla çıkar ve devam edebilir.
Geliştiriciler, aynı istemcide başka bir Bazel komutunun neden olduğu uzun bekleme sürelerini önlemek için bunu göndermeden önce yapılan kontrollerde kullanabilir.
--io_nice_level=n
En iyi çabayla G/Ç planlaması için 0-7 arasında bir düzey ayarlar. 0 en yüksek önceliktir, 7 en düşük değerdir. Tahmini planlayıcı yalnızca 4. önceliğe kadar olan görevleri dikkate alabilir. Negatif değerler yoksayılır.
--batch_cpu_scheduling
Bazel için batch
CPU planlamasını kullanın. Bu politika, etkileşimli olmayan ancak iyi değerlerini düşürmek istemeyen iş yükleri için kullanışlıdır.
Bkz. "man 2 sched_setscheduler". Bu politika, sistemin daha iyi hale getirilmesini sağlayabilir
etkileşimlerine ek sonuçlar sağlar.
Çeşitli seçenekler
--[no]announce_rc
Bazel'in, bazelrc dosyalarından okunan başlangıç seçeneklerini ve komut seçeneklerini başlatırken duyurup duyurmayacağını kontrol eder.
--color (yes|no|auto)
Bu seçenek, Bazel'in vurgulamak için renkleri kullanıp kullanmayacağını belirler çıkışını ekranda görebilirsiniz.
Bu seçenek yes
değerine ayarlanırsa renk çıkışı etkinleştirilir.
Bu seçenek auto
olarak ayarlanırsa Bazel, yalnızca çıkış bir terminale gönderiliyorsa ve TERM ortam değişkeni dumb
, emacs
veya xterm-mono
dışında bir değere ayarlanmışsa renkli çıkış kullanır.
Bu seçenek no
olarak ayarlanırsa çıkışın bir terminale gönderilip gönderilmediğine ve TERM ortam değişkeninin ayarına bakılmaksızın renkli çıkış devre dışı bırakılır.
--config=name
Şu listeden ek yapılandırma bölümünü seçer:
the rc files; command
için
command:name
adresindeki 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
tanımlar (örneğin, genişletmeler zincirlenebilir).
--curses (yes|no|auto)
Bu seçenek, Bazel'in imleç denetimlerini kullanıp kullanmayacağını belirler
emin olabilirsiniz. Bu, daha az kaydırma verisi ve daha fazla
basit ve okunması kolay bir çıkış akışı sağladı. Bu nedenle,
--color
Bu seçenek yes
olarak ayarlanırsa imleç denetimlerinin kullanımı etkinleştirilir.
Bu seçenek no
değerine ayarlanırsa imleç denetimlerinin kullanımı devre dışı bırakılır.
Bu seçenek auto
değerine ayarlanırsa imleç denetimlerinin kullanımı
--color=auto
ile aynı koşullar altında etkinleştirilir.
--[no]show_timestamps
Belirtilirse Basel tarafından oluşturulan her iletiye, iletinin gösterildiği zamanı belirten bir zaman damgası eklenir.