Yaygın tanımlar

Sorun bildir Kaynağı görüntüle Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

İçindekiler

Bourne kabuğu parçalama

Bazı kuralların belirli dize özellikleri, Bourne kabuğunun dize bölme kurallarına göre birden çok kelimeye bölünür: Tek tırnak içine alınmamış boşluklar ayrı kelimeleri sınırlandırır ve dize bölme işlemini önlemek için tek ve çift tırnak karakterleri ile ters eğik çizgiler kullanılır.

Bu jeton oluşturmaya tabi olan özellikler, bu dokümanda tanımları sırasında açıkça belirtilir.

"Make" değişkeni genişletmeye ve Bourne kabuğuna tabi olan özellikler, genellikle derleyicilere ve diğer araçlara keyfi seçenekler iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts ve java_library.javacopts verilebilir. Bu ikameler birlikte, tek bir dize değişkeninin yapılandırmaya özgü bir seçenek kelimeleri listesine genişlemesine olanak tanır.

Etiket genişletme

Çok az sayıda kuralın bazı dize özellikleri etiket genişletmesine tabidir: Bu dizeler alt dize olarak geçerli bir etiket (ör. //mypkg:target) içeriyorsa ve bu etiket geçerli kuralın tanımlanmış bir ön koşuluysa hedef //mypkg:target ile temsil edilen dosyanın yol adı olarak genişletilir.

Örnek özellikler arasında genrule.cmd ve cc_binary.linkopts yer alır. Ayrıntılar, her durumda önemli ölçüde değişiklik gösterebilir. Örneğin, göreli etiketlerin genişletilip genişletilmeyeceği, birden fazla dosyaya genişleyen etiketlerin nasıl ele alınacağı vb. konularla ilgili 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 özellikler açıklanmaktadır.

Özellik Açıklama
data

Etiketler 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 verir.

data özelliğindeki hedeflerin varsayılan çıkışları ve çalışma dosyaları, bu hedef tarafından oluşturulan veya bu hedefe çalışma zamanında bağımlı olan tüm yürütülebilir dosyaların *.runfiles alanında görünmelidir. Bu hedefin srcs yürütüldüğünde kullanılan veri dosyaları veya ikili dosyalar da buna dahildir. Veri dosyalarına bağımlı olma ve bu dosyaları 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şlerse bir data özelliği tanımlamalıdır. Kuralların uygulama işlevleri, data özelliğinin çıkışlarından ve çalıştırma dosyalarından, ayrıca kaynak kod veya çalışma zamanı bağımlılıkları sağlayan tüm bağımlılık özelliklerinin çalıştırma dosyalarından hedefin çalıştırma dosyalarını doldurmalıdır.

deps

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

Bu hedefin bağımlılıkları. Genellikle yalnızca kural hedeflerini listelemelidir. (Bazı kurallar, dosyaların doğrudan deps'te listelenmesine izin verse de mümkün olduğunca bu işlemden kaçınılmalıdır.)

Dile özgü kurallar genellikle listelenen hedefleri belirli sağlayıcılara sahip olanlarla sınırlandırır.

Bir hedefin deps kullanarak başka bir hedefe bağımlı olmasıyla ilgili tam anlam, kural türüne özeldir ve kurala özel dokümanlar daha ayrıntılı bilgi içerir. Kaynak kodu işleyen kurallarda deps genellikle srcs içindeki kod tarafından kullanılan kod bağımlılıkları belirtir.

deps bağımlılığı, genellikle 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. Birçok durumda dil arası bağımlılıklara da izin verilir: Örneğin, bir java_library hedefi, cc_library hedefindeki C++ koduna bağlı olabilir. Bu durumda, deps özelliğinde cc_library hedefi listelenir. Daha fazla bilgi için bağımlılıkların tanımına bakın.

licenses

Dize listesi; yapılandırılamaz; varsayılan değer ["none"]

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

Etiketler 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ı içerecek şekilde kural hedeflerini (filegroup veya genrule gibi) 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 dolaylı olarak eklenen özellikler açıklanmaktadır.

Özellik Açıklama
compatible_with

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

Varsayılan olarak desteklenen ortamlara ek olarak bu hedefin oluşturulabileceği ortamların listesi.

Bu, kullanıcıların hangi hedeflerin birbirine bağlı olabileceğini ve hangilerinin bağlı olamayacağını belirtmesine olanak tanıyan Bazel'in kısıtlama sisteminin bir parçasıdır. Örneğin, harici olarak dağıtılabilir ikili dosyalar, şirket gizli kodu içeren kitaplıklara bağlı olmamalıdır. Ayrıntılar için ConstraintSemantics bölümüne bakın.

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 kullanımdan kaldırıldığı, başka bir kuralın yerini aldığı, bir pakete özel olduğu veya bir nedenle zararlı olarak değerlendirildiği konusunda bilgilendirmek için kullanılır. Mesajın gösterilmesini önlemek için hangi değişikliklerin yapılması gerektiğini kolayca anlayabilmeleri amacıyla bir referans (ör. web sayfası, hata numarası veya örnek taşıma CL'leri) eklemek iyi bir fikirdir. Doğrudan değiştirme olarak kullanılabilecek yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımak iyi bir fikirdir.

Bu özelliğin, derleme şekli üzerinde bir etkisi yoktur ancak derleme aracının teşhis çıktısını etkileyebilir. Derleme aracı, deprecation özelliğine sahip 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. Böylece, örneğin desteği sonlandırılan bir kuralın testlerinin derlenmesi uyarıyla karşılaşmaz.

Desteği sonlandırılan bir hedef, desteği sonlandırılan başka bir hedefe bağlıysa uyarı mesajı gönderilmez.

Kullanıcılar bu kampanyayı kullanmayı bıraktıktan sonra hedef kaldırılabilir.

distribs

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

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

exec_compatible_with

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

Bu hedefin yürütme platformunda bulunması gereken constraint_values listesi. Bu, kural türü tarafından önceden ayarlanmış tüm 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 araç zinciri çözümlemesinin açıklamasına bakın.

exec_properties

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

Bu hedef için seçilen bir platformun exec_properties özelliğine eklenecek dize dizini. Platform kuralının exec_properties bölümüne bakın.

Hem platform hem de hedef düzeyindeki özelliklerde bir anahtar varsa değer hedeften alınır.

features

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

Ö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, paket düzeyindeki features özelliğiyle birleştirilir. Örneğin, ["a", "b"] özellikleri paket düzeyinde etkinleştirildiyse ve bir hedefin features özelliği ["-a", "c"] içeriyorsa kural için etkinleştirilen özellikler "b" ve "c" olur. Örneğe bakın.

restricted_to

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

Varsayılan olarak desteklenen ortamlar yerine bu hedefin derlenebileceği ortamların listesi.

Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Ayrıntılar için compatible_with bölümüne bakın.

tags

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

Etiketler herhangi bir kuralda kullanılabilir. Test ve test_suite kurallarındaki etiketler, testleri kategorilere ayırmak için kullanışlıdır. Test dışı hedeflerdeki etiketler, genrule'lerin ve Starlark işlemlerinin korumalı alanda yürütülmesini kontrol etmek ve gerçek kişiler 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 aşağıdaki anahtar kelimeleri ya da herhangi bir Starlark işlemi için execution_requirements anahtarlarını bulursa korumalı alan kodunun davranışını değiştirir.

  • no-sandbox anahtar kelimesi, işlemin veya testin hiçbir zaman korumalı alana alınmamasına neden olur. İşlem veya test yine de önbelleğe alınabilir ya da uzaktan çalıştırılabilir. Bu işlemlerin birini veya ikisini birden önlemek için no-cache veya no-remote kullanın.
  • no-cache anahtar kelimesi, işlemin veya testin hiçbir zaman önbelleğe alınmasına (yerel olarak veya uzaktan) neden olur. Not: Bu etiket için disk önbelleği yerel önbelleğe, HTTP ve gRPC önbellekleri ise uzak önbelleğe dahil edilir. Skyframe veya kalıcı işlem önbelleği gibi diğer önbellekler bu durumdan etkilenmez.
  • no-remote-cache anahtar kelimesi, işlemin veya testin hiçbir zaman uzaktan önbelleğe alınmasına neden olmaz (ancak yerel olarak önbelleğe alınabilir; uzaktan da yürütülebilir). Not: Bu etiket bağlamında 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 bu durumdan etkilenmez. Yerel disk önbelleği ve uzak önbelleğin bir kombinasyonu (birleştirilmiş önbellek) kullanılıyorsa bu, uzak önbellek olarak değerlendirilir ve --incompatible_remote_results_ignore_disk ayarlanmadığı sürece 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 bölümünü devre dışı bırakır. uzaktan yürütmeyi devre dışı bırakmaz.
  • local anahtar kelimesi, işlemin veya testin uzaktan önbelleğe alınmasını, uzaktan yürütülmesini ya da korumalı alanda çalıştırılmasını engeller. Kuralların local = True özelliğiyle işaretlenmesi, kuralın genrules ve testler için aynı etkiye sahiptir.
  • requires-network anahtar kelimesi, korumalı alan içinden harici ağa erişime izin verir. Bu etiket yalnızca korumalı alan etkinse geçerli olur.
  • block-network anahtar kelimesi, korumalı alan içinden harici ağa erişimi engeller. Bu durumda yalnızca localhost ile iletişime izin verilir. Bu etiket yalnızca korumalı alan etkinleştirilmişse etkili olur.
  • requires-fakeroot, testi veya işlemi uid ve gid 0 (yani kök kullanıcı) olarak çalıştırır. Bu özellik yalnızca Linux'ta desteklenir. Bu etiket, --sandbox_fake_username komut satırı seçeneğinden önceliklidir.

Testlerdeki etiketler genellikle bir testin hata ayıklama ve yayınlama sürecinizdeki rolünü açıklamak için kullanılır. Etiketler genellikle, çalışma zamanında ek açıklama özelliği olmayan C++ ve Python testlerinde en yararlı olur. Etiketlerin ve boyut öğelerinin kullanılması, kod tabanı check-in politikasına dayalı test paketleri oluşturma konusunda 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ılarak aynı anda başka testlerin çalışmamasını sağlar. Bu tür testler, tüm derleme etkinliği ve özel olmayan testler tamamlandıktan sonra seri olarak yürütülür. Bazel, uzak bir makinede nelerin çalıştığı üzerinde kontrol sahibi olmadığından uzaktan yürütme bu tür testlerde devre dışıdır.
  • exclusive-if-local, yerel olarak çalıştırılırsa testin "özel" modda çalıştırılmasını zorunlu kılar ancak uzaktan çalıştırılırsa testi paralel olarak çalıştırır.
  • manual anahtar kelimesi, build, test ve coverage komutları için oluşturulacak/çalıştırılacak üst düzey hedef grubunu hesaplarken testi açıkça listelemeyen hedef kalıp joker karakterlerinin (..., :*, :all vb.) ve test_suite kurallarının genişletilmesinden hedefi hariç tutar. query komutu dahil olmak üzere diğer bağlamlarda hedef joker karakteri veya test grubu genişletmesini etkilemez. manual değerinin, bir hedefin sürekli derleme/test sistemleri tarafından otomatik olarak derlenmemesi/çalıştırılmaması gerektiği anlamına gelmediğini unutmayın. Örneğin, belirli Bazel işaretleri gerektirdiği için bir hedefin bazel test ...'ten hariç tutulması ancak yine de düzgün şekilde yapılandırılmış göndermeden önce veya sürekli test çalıştırmalarına dahil edilmesi istenebilir.
  • external anahtar kelimesi, testin koşulsuz olarak (--cache_test_results değerinden bağımsız olarak) yürütülmesini zorunlu kılar.
Test hedeflerine eklenen etiketlerle ilgili daha fazla sözleşme için Test Ansiklopedisi'ndeki Etiket Sözleşmeleri bölümünü inceleyin.
target_compatible_with

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

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

Geçiş yoluyla uyumsuz hedeflere bağlı olan hedeflerin kendisi de uyumsuz kabul edilir. Ayrıca derleme ve test için atlanır.

Boş bir liste (varsayılan değerdir) 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 etkili değildir. Örneğin, cc_toolchain için target_compatible_with belirtmek yararlı değildir.

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

testonly

Boole; yapılandırılamaz; test ve test grubu hedefleri hariç varsayılan değer False

True ise yalnızca test amaçlı hedefler (testler gibi) bu hedefe bağlı olabilir.

Eşdeğer olarak, 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 değerine sahiptir.

Bu özelliğin amacı, hedefin üretime sunulan ikili dosyalarda bulunmaması gerektiğidir.

testonly, çalışma zamanında değil derleme zamanında uygulanır ve bağımlılık ağacında viral olarak yayılır. Bu nedenle, testonly dikkatli bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan stub'lar ve sahte öğeler, üretime yayınlanacak aynı ikili dosyaları içeren entegrasyon testleri için de yararlı olabilir. Bu nedenle, muhtemelen yalnızca test olarak işaretlenmemelidir. Buna karşılık, normal davranışı koşulsuz olarak geçersiz kıldığı için bağlantı oluşturmak bile tehlikeli olan kurallar kesinlikle testonly olarak işaretlenmelidir.

toolchains

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

Bu hedefin Değişken oluştur işlevine erişmesine izin verilen hedef grubu. Bu hedefler, TemplateVariableInfo sağlayan kural örnekleri veya Bazel'e yerleştirilmiş araç zinciri türleri için özel hedeflerdir. Bunlardan bazıları:

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

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

visibility

Etiketler listesi; yapılandırılamaz; varsayılan değer değişiklik gösterir

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 BUILD dosyasından çağrılan eski makrolarda tanımlanan hedefler için varsayılan değer, belirtilmişse paketin default_visibility değeridir, aksi takdirde ["//visibility:private"] olur. Bir veya daha fazla sembolik makroda tanımlanan hedefler için varsayılan değer her zaman ["//visibility:private"]'tür (bu da hedefin yalnızca makronun kodunu içeren paket içinde kullanılabilmesini sağlar).

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

Dize listesi; $(location) ve "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu jetonuna tabidir; varsayılan değer []'dir.

Bazel, bazel test ile çalıştırıldığında hedefe ilettiği komut satırı bağımsız değişkenleri.

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

env

Dize dizini; değerler $(location) ve "Değişken oluştur" yerine getirilmesine tabidir; varsayılan değer {}'tir.

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 tarafından tanımlanan test kuralları için geçerli değildir. Kendi Starlark kurallarınıza "env" özelliği ekleyebilir ve bu özelliği kullanarak bir TestEnvironment sağlayıcısını doldurabilirsiniz.

env_inherit

Dize listesi; varsayılan değer []'tir.

Test bazel test tarafından 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 tarafından tanımlanan test kuralları için geçerli değildir.

size

"enormous", "large", "medium" veya "small" dizesi; yapılandırılamaz; varsayılan değer "medium"

Bir test hedefinin "ağırlığını" belirtir: Çalıştırılması için ne kadar süreye/kaynağa ihtiyaç duyulur?

Birim testleri "küçük", entegrasyon testleri "orta" ve uçtan uca testler "büyük" veya "devasa" olarak kabul edilir. Bazel, varsayılan 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, planlama amacıyla da kullanılır: Bazel, --local_{ram,cpu}_resources'e uymaya çalışır 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ımlarına karşılık gelir:

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

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

timeout

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

Testin sonuç döndürmeden önce ne kadar süre çalışacağı.

Bir testin boyut özelliği, kaynak tahminini kontrol ederken testin zaman aşımı bağımsız olarak ayarlanabilir. Belirtilmemişse zaman aşımı, testin boyutuna göre belirlenir. Test zaman aşımı, --test_timeout işaretiyle geçersiz kılınabilir (ör. yavaş olduğu bilinen belirli koşullarda çalıştırmak için). Test zaman aşımı değerleri aşağıdaki dönemlere karşılık gelir:

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

Yukarıdakilerden farklı zamanlarda, test zaman aşımı --test_timeout bazel işaretiyle geçersiz kılınabilir (ör. 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 süresini iki dakika olarak ayarlar.

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

flaky

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

Testi kararsız olarak işaretler.

Ayarlanırsa testi üç defaya kadar yürütür ve yalnızca her defasında başarısız olursa testi başarısız olarak işaretler. Varsayılan olarak bu özellik False olarak ayarlanır ve test yalnızca bir kez çalıştırılır. Bu özelliğin kullanılması genellikle önerilmez. İddialar doğru olduğunda testler güvenilir bir şekilde geçmelidir.

shard_count

50'den küçük veya 50'ye eşit pozitif tam sayı; varsayılan değer -1'tür

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

Ayarlanırsa bu değer, testi çalıştıracak paralel parça sayısını belirlemek için kullanılan tüm sezgisel kuralları geçersiz kılar. Bazı test kuralları için, parçalamayı etkinleştirmek amacıyla öncelikle bu parametrenin gerekli olabileceğini unutmayın. --test_sharding_strategy sayfasını da inceleyin.

Test bölme işlemi etkinse TEST_TOTAL_SHARDS ortam değişkeni, test oluşturulurken bu değere ayarlanır.

Bölme işlemi için test çalıştırıcısının test bölme protokolünü desteklemesi gerekir. Aksi takdirde, büyük olasılıkla her testi her parçada çalıştırır. Bu da istediğiniz şey değildir.

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

local

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

Testin, korumalı alan olmadan yerel olarak çalıştırılmasını zorunlu kılar.

Bu değerin True olarak ayarlanması, etiket olarak "local" (tags=["local"]) sağlanmasına eşdeğerdir.

Tüm ikili kurallarda ortak olan özellikler (*_binary)

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

Özellik Açıklama
args

Dize listesi; $(location) ve "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu jetonuna tabidir; yapılandırılamaz; varsayılan değer []'tır.

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, bazel-bin/ içinde ikili dosyayı manuel olarak çalıştırarak) bağımsız değişkenler iletilmez.

env

Dize sözlüğü; değerler $(location) ve "Değişken oluştur" yerine koyma işlemine tabidir; varsayılan değer {}'tır.

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 tarafından tanımlanan yürütülebilir kurallar için geçerli değildir.

NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, bazel-bin/ içinde ikili dosyayı manuel olarak çalıştırarak) ortam değişkenleri ayarlanmaz.

output_licenses

Dize listesi; varsayılan değer []'tir.

Bu ikili dosyanın 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. Yani hedef farklı şekillerde oluşturulduğunda değerleri değişebilir. Özellikle, yapılandırılabilir özellikler Bazel komut satırına iletilen işaretlere veya hedefin alt akıştaki bağımlılığından gelen isteğe bağlı olarak değişebilir. Bu, örneğin, hedefi birden fazla platform veya derleme modu için özelleştirmek amacıyla kullanılabilir.

Aşağıdaki örnekte, farklı hedef mimarileri için farklı kaynaklar belirtilmektedir. bazel build :multiplatform_lib --cpu x86 çalıştırıldığında hedef x86_impl.cc kullanılarak oluşturulur. --cpu arm yerine arm_impl.cc kullanıldığında ise hedef arm_impl.cc kullanılarak oluşturulur.

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 özellik için farklı alternatif değerler arasından seçim yapar. Bu seçim, hedefin yapılandırmasının karşıladığı config_setting veya constraint_value ölçütlerine göre yapılır.

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

Dokümanlarında nonconfigurable işaretli özellikler bu özelliği kullanamaz. Bazel, bir select() değerini nasıl çözeceğini belirlemeden önce değerini dahili olarak bilmesi gerektiğinden, genellikle özellikler yapılandırılamaz.

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

Örtülü çıkış hedefleri

C++'taki örtük çıkışlara verilen destek sonlandırıldı. Mümkün olduğunda lütfen diğer dillerde kullanmaktan kaçının. Henüz desteği sonlandırılma planımız yok ancak bu sürümler de zaman içinde desteği sonlandırılacak.

Bir BUILD dosyasında derleme kuralı tanımladığınızda, pakette açıkça yeni, adlandırılmış bir kural hedefi beyan etmiş olursunuz. Birçok derleme kuralı işlevi, içeriği ve anlamı kurala özgü olan bir veya daha fazla çıkış dosyası hedefini dolaylı olarak da içerir. Örneğin, bir java_binary(name='foo', ...) kuralını açıkça bildirdiğinizde, aynı paketin üyesi olarak bir çıkış dosyası hedefini foo_deploy.jar dolaylı olarak da bildirmiş olursunuz. (Bu hedef, dağıtıma uygun, kendi kendine yeten bir Java arşividir.)

Örtük çıkış hedefleri, genel hedef grafiğinin birinci sınıf üyeleridir. Diğer hedefler gibi, bunlar da üst düzey derleme komutunda belirtildiğinde veya diğer derleme hedefleri için gerekli ön koşullar olduğunda isteğe bağlı olarak oluşturulur. Bunlar, BUILD dosyalarında bağımlılık olarak referans verilebilir ve bazel query gibi analiz araçlarının çıktısında gözlemlenebilir.

Her derleme kuralı türü için kuralın dokümanlarında, bu tür bir kuralın beyanının gerektirdiği tüm gizli çı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 adlandırma alanı arasında önemli ancak biraz ince bir fark vardır: Etiketler, kural veya dosya olabilecek hedefleri tanımlar. Dosya hedefleri ise kaynak (veya giriş) dosya hedefleri ve türetilmiş (veya çıkış) dosya hedefleri olarak ikiye ayrılabilir. Bunlar, BUILD dosyalarında bahsedebileceğiniz, komut satırından derleyebileceğiniz veya bazel query kullanarak inceleyebileceğiniz öğelerdir; bunlar hedef ad alanıdır. Her dosya hedefi, diskteki bir gerçek 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 üretilen .o nesne dosyalarına BUILD dosyalarından veya komut satırından referans verilemez. Bu sayede derleme aracı, görevini nasıl yerine getirdiğiyle ilgili belirli uygulama ayrıntılarını gizleyebilir. Bu konu BUILD Kavram Referansı'nda daha ayrıntılı olarak açıklanmıştır.