Yaygın tanımlar

Sorun bildir Kaynağı görüntüle Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Bu bölümde, birçok işlev veya derleme kuralında ortak olan çeşitli terimler ve kavramlar tanımlanmaktadır.

İçindekiler

Bourne shell'de belirteçlere ayırma

Bazı kuralların belirli dize özellikleri, Bourne kabuğunun belirteçleştirme kurallarına göre birden fazla kelimeye bölünür: Tırnak işareti kullanılmayan boşluklar ayrı kelimeleri sınırlar ve tek ile çift tırnak karakterleri ve ters eğik çizgiler, belirteçleştirme işlemini engellemek için kullanılır.

Bu belirteç oluşturma işlemine tabi olan özellikler, bu dokümandaki tanımlarında açıkça belirtilir.

"Make" değişken genişletme ve Bourne kabuğu belirteçleştirme işlemine tabi olan özellikler genellikle derleyicilere ve diğer araçlara rastgele seçenekler iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts ve java_library.javacopts verilebilir. Bu ikame işlemleri, tek bir dize değişkeninin yapılandırmaya özel bir seçenek kelimeleri listesine genişlemesine olanak tanır.

Etiket genişletme

Çok az kuralın bazı dize özellikleri etiket genişletmeye tabidir: Bu dizeler, //mypkg:target gibi bir alt dize olarak geçerli bir etiket içeriyorsa ve bu etiket, geçerli kuralın belirtilmiş bir ön koşuluysa hedef //mypkg:target ile temsil edilen dosyanın yol adına genişletilir.

Örnek özellikler arasında genrule.cmd ve cc_binary.linkopts yer alır. Ayrıntılar, her durumda önemli ölçüde farklılık gösterebilir. Örneğin, göreli etiketlerin genişletilip genişletilmediği, birden fazla dosyaya genişleyen etiketlerin nasıl işlendiği gibi konularda farklılıklar olabilir. Ayrıntılar için kural özelliği dokümanlarına bakın.

Çoğu derleme kuralı tarafından tanımlanan tipik özellikler

Bu bölümde, birçok derleme kuralı tarafından tanımlanan ancak tümü tarafından tanımlanmayan özellikler açıklanmaktadır.

Özellik Açıklama
data

Etiket listesi; varsayılan değer []'dir.

Bu kuralın çalışma zamanında ihtiyaç duyduğu dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verilir.

data özelliğindeki hedeflerin varsayılan çıkışları ve runfile'ları, bu hedef tarafından çıkışı yapılan veya bu hedefe çalışma zamanı bağımlılığı olan tüm yürütülebilir dosyaların *.runfiles alanında görünmelidir. Bu, hedef srcs çalıştırıldığında kullanılan veri dosyalarını veya ikili dosyaları içerebilir. Veri dosyalarına bağlı olma ve bunları kullanma hakkında daha fazla bilgi için veri bağımlılıkları bölümüne bakın.

Yeni kurallar, çalışma zamanında diğer girişleri kullanabilecek girişleri işliyorsa data özelliğini tanımlamalıdır. Kuralların uygulama işlevleri, data özelliğinin çıkışlarından ve runfiles'larından hedefin runfiles'larını da doldurmalıdır. Ayrıca, kaynak kodu veya çalışma zamanı bağımlılıkları sağlayan tüm bağımlılık özelliklerinden gelen runfiles'lar da doldurulmalıdır.

deps

Etiket listesi; varsayılan değer []'dir.

Bu hedefin bağımlılıkları. Genellikle yalnızca kural hedefleri listelenmelidir. (Bazı kurallar, dosyaların doğrudan deps içinde listelenmesine izin verse de bu durum mümkün olduğunca önlenmelidir.)

Dile özgü kurallar genellikle listelenen hedefleri belirli sağlayıcılarla sınırlar.

Bir hedefin deps kullanarak başka bir hedefe bağlı olmasının tam olarak ne anlama geldiği, kural türüne özgüdür ve kurala özgü belgelerde daha ayrıntılı bilgi verilmektedir. Kaynak kodu işleyen kurallar için deps genellikle srcs içindeki kod tarafından kullanılan kod bağımlılıklarını belirtir.

Çoğu zaman, bir deps bağımlılığı, bir modülün aynı programlama dilinde yazılmış ve ayrı olarak derlenmiş başka bir modülde tanımlanan sembolleri kullanmasına izin vermek için kullanılır. Çoğu durumda diller arası bağımlılıklara da izin verilir: Örneğin, java_library hedefi, cc_library hedefindeki C++ koduna bağlı olabilir. Bu durumda, cc_library hedefi deps özelliğinde listelenir. Daha fazla bilgi için bağımlılıklar tanımına bakın.

licenses

Dizelerin listesi; yapılandırılamaz; varsayılan değer ["none"]'dır.

Bu hedef için kullanılacak lisans türü dizelerinin listesi. Bu, Bazel'in artık kullanmadığı, desteği sonlandırılmış bir lisanslama API'sinin parçasıdır. Bunu kullanmayın.

srcs

Etiket listesi; varsayılan değer []'dir.

Bu kural tarafından işlenen veya dahil edilen dosyalar. Genellikle dosyaları doğrudan listeler ancak varsayılan çıkışlarını dahil etmek için kural hedeflerini (ör. filegroup veya genrule) listeleyebilir.

Dile özgü kurallar genellikle listelenen dosyaların belirli dosya uzantılarına sahip olmasını gerektirir.

Tüm derleme kuralları için ortak özellikler

Bu bölümde, tüm derleme kurallarına örtülü olarak eklenen özellikler açıklanmaktadır.

Özellik Açıklama
aspect_hints

Etiket listesi; varsayılan değer []'dir.

Yönlere (özellikle bu kuralın ters bağımlılıkları tarafından çağrılan yönler) sunulan ancak bu kuralın kendi uygulamasına sunulmayan rastgele etiketlerin listesi. Belirli bir yön ipucunun ne gibi bir etkisi olacağıyla ilgili ayrıntılar için dile özgü kural kümeleriyle ilgili belgelere bakın.

Bir yön ipucunu etiketin daha zengin bir alternatifi olarak düşünebilirsiniz: Etiket yalnızca bir boole durumu (etiket, tags listesinde mevcut veya eksik) iletirken yön ipucu, sağlayıcılarında rastgele yapılandırılmış bilgiler iletebilir.

Uygulamada, yön ipuçları farklı dile özgü kural kümeleri arasındaki birlikte çalışabilirlik için kullanılır. Örneğin, mylang_binary hedefinizin otherlang_library hedefine bağlı olması gerektiğini düşünün. MyLang'e özgü mantığın kullanılabilmesi için OtherLang hedefiyle ilgili bazı ek bilgilere ihtiyaç duyuluyor ancak otherlang_library MyLang hakkında hiçbir şey bilmediği için bu bilgileri sağlamıyor. Bir çözüm, MyLang kural kümesinin bu ek bilgileri kodlamak için kullanılabilecek bir mylang_hint kuralı tanımlaması olabilir. Kullanıcı, ipucunu otherlang_library's aspect_hints'ına ekleyebilir ve mylang_binary, mylang_hint'daki MyLang'e özgü bir sağlayıcıdan ek bilgileri toplamak için bir yön kullanabilir.

Somut bir örnek için rules_swift bölümündeki swift_interop_hint ve swift_overlay öğelerine bakın.

En iyi uygulamalar:

  • aspect_hints içinde listelenen hedefler hafif ve minimal olmalıdır.
  • Dile özgü mantık, yalnızca o dille alakalı sağlayıcıları olan yön ipuçlarını dikkate almalı ve diğer tüm yön ipuçlarını yok saymalıdır.
compatible_with

Etiket listesi; yapılandırılamaz; varsayılan değer []

Bu hedefin oluşturulabileceği ortamların listesi (varsayılan olarak desteklenen ortamlar hariç).

Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Bu sistem, kullanıcıların hangi hedeflerin birbirine bağlı olabileceğini ve olamayacağını bildirmesine olanak tanır. Örneğin, harici olarak dağıtılabilir ikili dosyalar, şirket sırrı kodu içeren kitaplıklara bağlı olmamalıdır. Ayrıntılar için ConstraintSemantics başlıklı makaleyi inceleyin.

deprecation

Dize; yapılandırılamaz; varsayılan değer None

Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Bu genellikle kullanıcıları bir hedefin eski hale geldiği, başka bir kuralın yerini aldığı, bir pakete özel olduğu veya bir nedenden dolayı zararlı olarak kabul edildiği konusunda bilgilendirmek için kullanılır. Mesajın gösterilmesini önlemek için hangi değişikliklerin yapılması gerektiğini kolayca öğrenmek amacıyla bazı referanslar (ör. bir web sayfası, hata numarası veya örnek taşıma CL'leri) eklemeniz önerilir. Eski hedef yerine kullanılabilecek yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımanız iyi bir fikirdir.

Bu özelliğin, öğelerin oluşturulma şekli üzerinde etkisi yoktur ancak bir derleme aracının teşhis çıkışını etkileyebilir. Derleme aracı, deprecation özelliği olan bir kural başka bir paketteki bir hedef tarafından kullanıldığında uyarı verir.

Paket içi bağımlılıklar bu uyarıdan muaftır. Bu nedenle, örneğin, desteği sonlandırılan bir kuralın testlerini oluştururken uyarıyla karşılaşılmaz.

Kullanımdan kaldırılan bir hedef, başka bir kullanımdan kaldırılan hedefe bağlıysa uyarı mesajı verilmez.

Kullanıcılar özelliği kullanmayı bıraktıktan sonra hedef kaldırılabilir.

exec_compatible_with

Etiket listesi; yapılandırılamaz; varsayılan değer []

Bu hedefin varsayılan yürütme grubunun yürütme platformunda bulunması gereken constraint_values listesi. Bu, kural türü tarafından önceden belirlenmiş kısıtlamalara ek olarak geçerlidir. Kısıtlamalar, kullanılabilir yürütme platformlarının listesini kısıtlamak için kullanılır. Daha fazla bilgi için toolchain çözümü açıklamasına bakın. ve yönetici grupları

exec_group_compatible_with

Etiket listeleri için dize sözlüğü; yapılandırılabilir olmayan; varsayılan değer {}

Belirli bir yürütme grubu için yürütme platformunda bulunması gereken constraint_values listelerinin yürütme grubu adları sözlüğü. Bu, yönetici grubunun tanımında zaten belirlenmiş olan kısıtlamalara ek olarak uygulanır. Kısıtlamalar, kullanılabilir yürütme platformlarının listesini kısıtlamak için kullanılır. Daha fazla bilgi için toolchain çözümü açıklamasına bakın. ve yönetici grupları

exec_properties

Dize sözlüğü; varsayılan değer {}'dır.

Bu hedef için seçilen bir platformun exec_properties bölümüne eklenecek dizeler sözlüğü. Platform kuralının exec_properties bölümüne bakın.

Bir anahtar hem platform hem de hedef düzeyindeki özelliklerde bulunuyorsa değer hedeften alınır.

Anahtarlar, yalnızca belirli bir yönetici grubuna uygulanmak üzere bir yürütme grubunun adıyla başlayıp ardından . ile devam edebilir.

features

Özellik dizelerinin listesi; varsayılan değer []'dır.

Özellik, bir hedefte etkinleştirilebilen veya devre dışı bırakılabilen dize etiketidir. Bir özelliğin anlamı, kuralın kendisine bağlıdır.

Bu features özelliği, package düzeyindeki features özelliğiyle birlikte kullanılır. Örneğin, paket düzeyinde ["a", "b"] özellikleri etkinleştirilmişse ve bir hedefin features özelliği ["-a", "c"] içeriyorsa kural için etkinleştirilen özellikler "b" ve "c" olur. Örneği inceleyin.

package_metadata

Etiketler listesi; yapılandırılamaz; varsayılan değer paketin default_package_metadata

Bu hedefle ilgili meta verilerle ilişkilendirilmiş etiketlerin listesi. Etiketler genellikle sabit değerler döndüren basit kurallardır. Kurallar ve yönler, derleme grafiğinde bazı ek analizler yapmak için bu etiketleri kullanabilir.

Standart kullanım alanı rules_license'tır. Bu kullanım alanında, package_metadata ve default_package_metadata, bir paketin lisansı veya sürümüyle ilgili bilgileri hedeflere eklemek için kullanılır. Üst düzey bir ikiliye uygulanan bir yön, bunları toplamak ve uygunluk raporları oluşturmak için kullanılabilir.

restricted_to

Etiket listesi; yapılandırılamaz; varsayılan değer []

Bu hedefin oluşturulabileceği ortamların listesi, varsayılan olarak desteklenen ortamlar yerine.

Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Ayrıntılar için compatible_with sayfasına bakın.

tags

Dizelerin listesi; yapılandırılamaz; varsayılan değer []'dır.

Etiketler herhangi bir kuralda kullanılabilir. Test ve test_suite kurallarındaki etiketler, testleri kategorize etmek için kullanışlıdır. Test hedefi olmayan hedeflerdeki etiketler, genrule ve Starlark işlemlerinin korumalı alanda yürütülmesini kontrol etmek ve insanlar ve/veya harici araçlar tarafından ayrıştırılmak için kullanılır.

Bazel, herhangi bir testin veya genrule hedefinin tags özelliğinde ya da herhangi bir Starlark işlemi için execution_requirements anahtarlarında aşağıdaki anahtar kelimeleri bulursa sanal alan oluşturma kodunun davranışını değiştirir.

  • no-sandbox anahtar kelimesi, işlemin veya testin hiçbir zaman korumalı alanda çalıştırılmamasına neden olur. İşlem veya test yine de önbelleğe alınabilir ya da uzaktan çalıştırılabilir. Bu işlemlerden birini veya her ikisini de önlemek için no-cache ya da no-remote kullanın.
  • no-cache anahtar kelimesi, işlem veya testin hiçbir zaman (yerel olarak ya da uzaktan) önbelleğe alınmamasına neden olur. Not: Bu etiket için disk önbelleği yerel önbellek, HTTP ve gRPC önbellekleri ise uzak önbellek olarak kabul edilir. Skyframe veya kalıcı işlem önbelleği gibi diğer önbellekler etkilenmez.
  • no-remote-cache anahtar kelimesi, işlemin veya testin hiçbir zaman uzaktan önbelleğe alınmamasına neden olur (ancak yerel olarak önbelleğe alınabilir ve uzaktan da yürütülebilir). Not: Bu etiket için disk önbelleği yerel önbellek, HTTP ve gRPC önbellekleri ise uzak önbellek olarak kabul edilir. Skyframe veya kalıcı işlem önbelleği gibi diğer önbellekler etkilenmez. Yerel disk önbelleği ve uzak önbellek kombinasyonu kullanılıyorsa (birleştirilmiş önbellek), --incompatible_remote_results_ignore_disk ayarlanmadığı sürece uzak önbellek olarak değerlendirilir ve tamamen devre dışı bırakılır. Bu durumda yerel bileşenler kullanılır.
  • no-remote-exec anahtar kelimesi, işlemin veya testin hiçbir zaman uzaktan yürütülmemesine neden olur (ancak uzaktan önbelleğe alınabilir).
  • no-remote anahtar kelimesi, işlemin veya testin uzaktan yürütülmesini ya da uzaktan önbelleğe alınmasını engeller. Bu, hem no-remote-cache hem de no-remote-exec kullanmaya eşdeğerdir.
  • no-remote-cache-upload anahtar kelimesi, bir spawn'ın uzaktan önbelleğe alınmasının yükleme kısmını devre dışı bırakır. uzaktan yürütme devre dışı bırakılmaz.
  • local anahtar kelimesi, işlemin veya testin uzaktan önbelleğe alınmasını, uzaktan yürütülmesini ya da korumalı alan içinde çalıştırılmasını engelliyor. Genrules ve testler için kuralı local = True özelliğiyle işaretlemek aynı etkiye sahiptir.
  • requires-network anahtar kelimesi, korumalı alanın içinden harici ağa erişime izin verir. Bu etiket yalnızca korumalı alan etkinse etkili olur.
  • block-network anahtar kelimesi, korumalı alanın içinden harici ağa erişimi engeller. Bu durumda yalnızca localhost ile iletişime izin verilir. Bu etiket yalnızca korumalı alan etkinse geçerlidir.
  • requires-fakeroot, testi veya işlemi uid ve gid 0 olarak (yani root kullanıcı olarak) çalıştırır. Bu özellik yalnızca Linux'ta desteklenir. Bu etiket, --sandbox_fake_username komut satırı seçeneğine göre önceliklidir.

Testlerdeki etiketler genellikle testin hata ayıklama ve yayınlama sürecinizdeki rolünü açıklamak için kullanılır. Etiketler genellikle, herhangi bir çalışma zamanı ek açıklama özelliği bulunmayan C++ ve Python testlerinde en kullanışlıdır. Etiketlerin ve boyut öğelerinin kullanılması, kod tabanı check-in politikasına dayalı test paketlerinin oluşturulmasında esneklik sağlar.

Bazel, test kuralının tags özelliğinde aşağıdaki anahtar kelimeleri bulursa test çalıştırma davranışını değiştirir:

  • exclusive, testin "özel" modda çalıştırılmasını zorunlu kılar ve aynı anda başka testlerin çalıştırılmamasını sağlar. Bu tür testler, tüm derleme etkinliği ve özel olmayan testler tamamlandıktan sonra sırayla yürütülür. Bazel, uzak makinede neyin çalıştığını kontrol edemediği için bu tür testlerde uzaktan yürütme devre dışıdır.
  • exclusive-if-local, yerel olarak yürütülürse testin "exclusive" modunda çalıştırılmasını zorlar ancak uzaktan yürütülürse testi paralel olarak çalıştırır.
  • manual anahtar kelimesi, hedefi hedef kalıbı joker karakterlerinin (..., :*, :all vb.) ve test_suite kurallarının genişletilmesinin dışında tutar. Bu kurallar, build, test ve coverage komutları için oluşturulacak/çalıştırılacak üst düzey hedefler kümesi hesaplanırken testi açıkça listelemez. Bu, query komutu da dahil olmak üzere diğer bağlamlarda hedef joker karakterini veya test paketi genişletmeyi etkilemez. manual, bir hedefin sürekli derleme/test sistemleri tarafından otomatik olarak oluşturulmaması/çalıştırılmaması gerektiği anlamına gelmez. Örneğin, belirli Bazel işaretleri gerektirdiği için bir hedefi bazel test ...'dan hariç tutmak ancak yine de uygun şekilde yapılandırılmış ön gönderme veya sürekli test çalıştırmalarına dahil etmek isteyebilirsiniz.
  • external anahtar kelimesi, testin koşulsuz olarak yürütülmesini zorlar (--cache_test_results değerinden bağımsız olarak).
Test hedeflerine eklenen etiketlerle ilgili daha fazla kural için Test Ansiklopedisi'ndeki Etiket Kuralları bölümüne bakın.
target_compatible_with

Etiket listesi; varsayılan değer []'dir.

Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken constraint_valuelistesi. Bu, kural türü tarafından önceden belirlenmiş kısıtlamalara ek olarak geçerlidir. Hedef platform, listelenen tüm kısıtlamaları karşılamıyorsa hedef uyumsuz olarak kabul edilir. Hedef kalıbı genişletildiğinde (ör. //..., :all) uyumsuz hedefler oluşturma ve test etme işlemi için atlanır. Komut satırında açıkça belirtildiğinde uyumsuz hedefler, Bazel'in bir hata yazdırmasına ve derleme veya test hatasına neden olur.

Uyumsuz hedeflere geçişli olarak bağlı olan hedefler de uyumsuz kabul edilir. Ayrıca derleme ve test için de atlanır.

Boş bir liste (varsayılan değer) hedefin tüm platformlarla uyumlu olduğunu gösterir.

Workspace kuralları dışındaki tüm kurallar bu özelliği destekler. Bu özellik, bazı kurallar için geçerli değildir. Örneğin, cc_toolchain için target_compatible_with belirtmek yararlı değildir.

Uyumsuz hedef atlama hakkında daha fazla bilgi için Platformlar sayfasına bakın.

testonly

Boole değeri; yapılandırılamaz; test ve test paketi hedefleri hariç varsayılan değer False'dir.

True ise yalnızca testonly hedefleri (ör. testler) bu hedefe bağlı olabilir.

Benzer şekilde, testonly olmayan bir kuralın testonly olan bir kurala bağlı olmasına izin verilmez.

Testler (*_test kuralları) ve test paketleri (test_suite kuralları) varsayılan olarak testonly'dir.

Bu özellik, hedefin üretime sunulan ikili dosyalarda yer almaması gerektiğini belirtir.

testonly, çalışma zamanında değil derleme zamanında zorunlu kılındığı ve bağımlılık ağacında viral olarak yayıldığı için dikkatli bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan sahte nesneler ve taklitler, üretime yayınlanacak aynı ikili dosyaları içeren entegrasyon testleri için de yararlı olabilir. Bu nedenle, muhtemelen yalnızca test için olarak işaretlenmemelidir. Aksine, normal davranışı koşulsuz olarak geçersiz kıldığı için bağlantı oluşturmanın bile tehlikeli olduğu kurallar kesinlikle testonly olarak işaretlenmelidir.

toolchains

Etiket listesi; yapılandırılamaz; varsayılan değer []

Bu hedefin Değişken oluştur özelliğine erişmesine izin verilen hedef grubu. Bu hedefler, TemplateVariableInfo sağlayan kuralların örnekleri veya Bazel'e yerleştirilmiş araç zinciri türleri için özel hedeflerdir. Bunlar şunları içerir:

  • @bazel_tools//tools/cpp:toolchain_type
  • @rules_java//toolchains:current_java_runtime

Bunun, platforma bağlı yapılandırma için kural uygulamalarında kullanılan araç zinciri çözümü kavramından farklı olduğunu unutmayın. Bu özelliği, bir hedefin hangi cc_toolchain veya java_toolchain kullanacağını belirlemek için kullanamazsınız.

visibility

Etiket listesi; yapılandırılamaz; varsayılan değer değişir

visibility özelliği, hedefin diğer konumlardaki hedefler tarafından kullanılıp kullanılamayacağını kontrol eder. Görünürlük ile ilgili dokümanları inceleyin.

Doğrudan bir BUILD dosyasında veya bir BUILD dosyasından çağrılan eski makrolarda bildirilen hedefler için varsayılan değer, belirtilmişse paketin default_visibility, aksi takdirde ["//visibility:private"] olur. Bir veya daha fazla sembolik makroda belirtilen hedefler için varsayılan değer her zaman yalnızca ["//visibility:private"]'dır (bu da değeri yalnızca makro kodunu içeren pakette kullanılabilir hâle getirir).

Tüm test kuralları için ortak özellikler (*_test)

Bu bölümde, tüm test kuralları için ortak olan özellikler açıklanmaktadır.

Özellik Açıklama
args

Dizelerin listesi; $(location) ve "Make variable" yerine koyma ve Bourne shell belirteçleştirme işlemine tabidir; varsayılan değer []'dır.

Bazel'in bazel test ile yürütüldüğünde hedefe aktardığı komut satırı bağımsız değişkenleri.

Bu bağımsız değişkenler, bazel test komut satırında belirtilen tüm --test_arg değerlerinden önce iletilir.

env

Dizeler sözlüğü; değerler $(location) ve "Make variable" yerine koyma işlemine tabidir; varsayılan değer {}'dir.

Test bazel test tarafından yürütüldüğünde ayarlanacak ek ortam değişkenlerini belirtir.

Bu özellik yalnızca cc_test, py_test ve sh_test gibi yerel kurallar için geçerlidir. Starlark ile tanımlanan test kuralları için geçerli değildir. Kendi Starlark kurallarınız için bir "env" özelliği ekleyebilir ve bunu RunEnvironmentInfo sağlayıcısını doldurmak için kullanabilirsiniz.

TestEnvironment Provider.

env_inherit

Dizelerin listesi; varsayılan değer []'dır.

bazel test tarafından test yürütüldüğünde harici ortamdan devralınacak ek ortam değişkenlerini belirtir.

Bu özellik yalnızca cc_test, py_test ve sh_test gibi yerel kurallar için geçerlidir. Starlark ile tanımlanan test kuralları için geçerli değildir.

size

Dize "enormous", "large", "medium" veya "small"; yapılandırılamaz; varsayılan değer "medium"'dir.

Bir test hedefinin "ağırlığını" (çalışması için ne kadar süre/kaynak gerektiği) belirtir.

Birim testleri "küçük", entegrasyon testleri "orta", uçtan uca testler ise "büyük" veya "çok büyük" olarak kabul edilir. Bazel, varsayılan bir zaman aşımı süresini belirlemek için boyutu kullanır. Bu süre, timeout özelliği kullanılarak geçersiz kılınabilir. Zaman aşımı, her bir test için değil, BUILD hedefindeki tüm testler için geçerlidir. Test yerel olarak çalıştırıldığında size, ek olarak planlama amacıyla da kullanılır: Bazel, --local_{ram,cpu}_resources değerine uymaya ve aynı anda çok sayıda ağır test çalıştırarak yerel makineyi aşırı yüklememeye çalışır.

Test boyutları aşağıdaki varsayılan zaman aşımlarına ve varsayılan en yüksek yerel kaynak kullanımına karşılık gelir:

Boyut RAM (MB cinsinden) CPU (CPU çekirdeklerinde) Varsayılan zaman aşımı
small 20 1 kısa (1 dakika)
medium 100 1 orta (5 dakika)
large 300 1 uzun (15 dakika)
çok büyük 800 1 eternal (60 dakika)

Test oluşturulurken TEST_SIZE ortam değişkeni bu özelliğin değeri olarak ayarlanır.

timeout

Dize "short", "moderate", "long" veya "eternal"; yapılandırılamaz; varsayılan değer, testin size özelliğinden türetilir.

Testin dönmeden önce ne kadar süre çalışması bekleniyor?

Bir testin boyut özelliği kaynak tahminini kontrol ederken testin zaman aşımı bağımsız olarak ayarlanabilir. Açıkça belirtilmediği takdirde, zaman aşımı testin boyutuna göre belirlenir. Test zaman aşımı, --test_timeout işaretiyle geçersiz kılınabilir. Örneğin, yavaş olduğu bilinen belirli koşullarda çalıştırmak için. Test zaman aşımı değerleri aşağıdaki sürelerle eşleşir:

Zaman Aşımı Değeri Dönem
kısa video 1 dakika
orta 5 dakika
uzun 15 dakika
ebedi 60 dakika

Yukarıda belirtilenler dışındaki zamanlarda, test zaman aşımı --test_timeout bazel işaretiyle geçersiz kılınabilir. Örneğin, yavaş olduğu bilinen koşullarda manuel olarak çalıştırmak için. --test_timeout değerleri saniye cinsindendir. Örneğin, --test_timeout=120, test zaman aşımını iki dakika olarak ayarlar.

Test oluşturulurken TEST_TIMEOUT ortam değişkeni, test zaman aşımına (saniye cinsinden) ayarlanır.

flaky

Boole; yapılandırılamaz; varsayılan değer False

Testi güvenilir olmayan olarak işaretler.

Ayarlanmışsa testi en fazla üç kez çalıştırır ve yalnızca her seferinde başarısız olursa başarısız olarak işaretler. Bu özellik varsayılan olarak False değerine ayarlanır ve test yalnızca bir kez yürütülür. Bu özelliğin kullanılmasının genellikle önerilmediğini unutmayın. Testler, onayları karşılandığında güvenilir bir şekilde başarılı olmalıdır.

shard_count

50'den küçük veya 50'ye eşit, negatif olmayan tam sayı; varsayılan değer -1

Testi çalıştırmak için kullanılacak paralel parça sayısını belirtir.

Bu değer ayarlanırsa testin çalıştırılacağı paralel parça sayısını belirlemek için kullanılan tüm sezgisel yöntemleri geçersiz kılar. Bazı test kurallarında, bu parametrenin parçalama özelliğini etkinleştirmek için gerekli olabileceğini unutmayın. Ayrıca --test_sharding_strategy başlıklı makaleyi inceleyin.

Test parçalama etkinleştirilirse test oluşturulurken TEST_TOTAL_SHARDS ortam değişkeni bu değere ayarlanır.

Parçalama, test çalıştırıcının test parçalama protokolünü desteklemesini gerektirir. Aksi takdirde, büyük olasılıkla her parçadaki her testi çalıştırır. Bu da sizin istediğiniz bir durum değildir.

Parçalama hakkında ayrıntılı bilgi için Test Ansiklopedisi'ndeki Test Parçalama bölümüne bakın.

local

Boole; yapılandırılamaz; varsayılan değer False

Testin korumalı alan olmadan yerel olarak çalıştırılmasını zorlar.

Bu ayarı True olarak belirlemek, etiket olarak "local" (tags=["local"]) sağlamaya eşdeğerdir.

Tüm ikili kurallar için ortak özellikler (*_binary)

Bu bölümde, tüm ikili kurallar için ortak olan özellikler açıklanmaktadır.

Özellik Açıklama
args

Dizelerin listesi; $(location) ve "Make variable" yerine koyma ve Bourne shell tokenization'a tabidir; nonconfigurable; varsayılan değer []

Bazel'in, run komutuyla veya test olarak yürütüldüğünde hedefe ileteceği komut satırı bağımsız değişkenleri. Bu bağımsız değişkenler, bazel run veya bazel test komut satırında belirtilenlerden önce iletilir.

NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, ikiliyi bazel-bin/ içinde manuel olarak yürüterek) bağımsız değişkenler iletilmez.

env

Dize sözlüğü; değerler $(location) ve "Make variable" yerine geçme işlemine tabidir; varsayılan değer {}

Hedef bazel run tarafından yürütüldüğünde ayarlanacak ek ortam değişkenlerini belirtir.

Bu özellik yalnızca cc_binary, py_binary ve sh_binary gibi yerel kurallar için geçerlidir. Starlark ile tanımlanan yürütülebilir kurallar için geçerli değildir. Kendi Starlark kurallarınız için bir "env" özelliği ekleyebilir ve bunu RunEnvironmentInfo sağlayıcısını doldurmak için kullanabilirsiniz.

NOT: Hedefi Bazel dışında çalıştırdığınızda (ör. ikiliyi bazel-bin/ içinde manuel olarak yürüterek) ortam değişkenleri ayarlanmaz.

output_licenses

Dizelerin listesi; varsayılan değer []'dır.

Bu ikilinin oluşturduğu çıkış dosyalarının lisansları. Bu, Bazel'in artık kullanmadığı, desteği sonlandırılmış bir lisanslama API'sinin parçasıdır. Bunu kullanmayın.

Yapılandırılabilir özellikler

Çoğu özellik "yapılandırılabilir"dir. Bu, hedefin farklı şekillerde oluşturulması durumunda değerlerinin değişebileceği anlamına gelir. Daha net bir ifadeyle, yapılandırılabilir özellikler; Bazel komut satırına iletilen işaretlere veya hedefi isteyen aşağı akış bağımlılığına göre değişebilir. Bu özellik, örneğin birden fazla platform veya derleme modu için hedefi özelleştirmek üzere kullanılabilir.

Aşağıdaki örnekte, farklı hedef mimariler için farklı kaynaklar tanımlanmaktadır. bazel build :multiplatform_lib --cpu x86 komutunu çalıştırmak, x86_impl.cc kullanarak hedefi oluşturur. --cpu arm yerine geçirmek ise arm_impl.cc kullanılmasına neden olur.

cc_library(
    name = "multiplatform_lib",
    srcs = select({
        ":x86_mode": ["x86_impl.cc"],
        ":arm_mode": ["arm_impl.cc"]
    })
)
config_setting(
    name = "x86_mode",
    values = { "cpu": "x86" }
)
config_setting(
    name = "arm_mode",
    values = { "cpu": "arm" }
)

select() işlevi, yapılandırılabilir bir özelliğin farklı alternatif değerleri arasından, hedef yapılandırmanın hangi config_setting veya constraint_value ölçütlerini karşıladığına göre seçim yapar.

Bazel, makroları işledikten ve kuralları işlemeden önce (teknik olarak yükleme ve analiz aşamaları arasında) yapılandırılabilir özellikleri değerlendirir. select() değerlendirmesinden önceki tüm işlemler, select()'nın hangi dalı seçeceğini bilmez. Örneğin, makrolar seçilen dala göre davranışlarını değiştiremez ve bazel query yalnızca bir hedefin yapılandırılabilir bağımlılıkları hakkında ihtiyatlı tahminler yapabilir. Kurallar ve makrolarla select() kullanma hakkında daha fazla bilgi için bu SSS sayfasını inceleyin.

Dokümanlarında nonconfigurable ile işaretlenen özellikler bu özelliği kullanamaz. Genellikle bir özellik, Bazel'in select() nasıl çözüleceğini belirleyebilmesi için değerini dahili olarak bilmesi gerektiğinden yapılandırılamaz.

Ayrıntılı genel bakış için Yapılandırılabilir Derleme Özellikleri başlıklı makaleyi inceleyin.

Örtülü çıkış hedefleri

C++'taki örtülü çıkışlar desteği sonlandırıldı. Mümkün olduğunda lütfen diğer dillerde kullanmaktan kaçının. Henüz desteği sonlandırma yolumuz olmasa da bu işlevlerin de desteği sonlandırılacaktır.

Bir BUILD dosyasında derleme kuralı tanımladığınızda, bir pakette yeni ve adlandırılmış bir kural hedefi açıkça bildirmiş olursunuz. Birçok derleme kuralı işlevi, içerikleri ve anlamları kurala özgü olan bir veya daha fazla çıkış dosyası hedefi de örtülü olarak içerir. Örneğin, bir java_binary(name='foo', ...) kuralını açıkça bildirdiğinizde aynı paketin üyesi olarak bir çıkış dosyası hedefi foo_deploy.jar de örtülü olarak bildirmiş olursunuz. (Bu hedef, dağıtıma uygun bağımsız bir Java arşividir.)

Örtülü çıkış hedefleri, genel hedef grafiğin birinci sınıf üyeleridir. Diğer hedefler gibi bunlar da talep üzerine oluşturulur. Ya üst düzey derleme komutunda belirtildiklerinde ya da diğer derleme hedefleri için gerekli ön koşullar olduklarında oluşturulur. Bunlara BUILD dosyalarında bağımlılık olarak başvurulabilir ve bazel query gibi analiz araçlarının çıktısında gözlemlenebilir.

Her tür derleme kuralı için kuralın dokümanlarında, bu tür bir kuralın beyanıyla ilgili tüm örtülü çıkışların adlarını ve içeriklerini ayrıntılı olarak açıklayan özel bir bölüm bulunur.

Derleme sistemi tarafından kullanılan iki ad alanı arasında önemli ancak biraz ince bir ayrım vardır: Etiketler, kural veya dosya olabilen hedefleri tanımlar ve dosya hedefleri kaynak (veya giriş) dosyası hedefleri ile türetilmiş (veya çıkış) dosyası hedefleri olarak ikiye ayrılabilir. Bunlar, BUILD dosyalarında bahsedebileceğiniz, komut satırından oluşturabileceğiniz veya bazel query kullanarak inceleyebileceğiniz şeylerdir. Bu, hedef ad alanıdır. Her dosya hedefi, diskteki gerçek bir dosyaya (dosya sistemi ad alanı) karşılık gelir. Her kural hedefi, diskteki sıfır, bir veya daha fazla gerçek dosyaya karşılık gelebilir. Diskte, karşılık gelen hedefi olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında oluşturulan .o nesne dosyalarına BUILD dosyalarından veya komut satırından referans verilemez. Bu şekilde, derleme aracı işini nasıl yaptığıyla ilgili belirli uygulama ayrıntılarını gizleyebilir. Bu konu, BUILD Concept Reference'ta daha ayrıntılı olarak açıklanmaktadır.