Yaygın tanımlar

Sorun bildirin Kaynağı göster

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

İçindekiler

Bourne kabuk belirteçleme

Bazı kuralların belirli dize özellikleri, Bourne kabuğunun tokenizasyon kurallarına göre birden fazla kelimeye bölünür: Tırnak işareti içinde olmayan boşluklar ayrı kelimeleri sınırlar ve tek ve çift tırnaklı karakterler ile ters eğik çizgiler, belirteçlemeyi önlemek için kullanılır.

Bu tokenizasyona tabi olan özellikler, bu belgedeki tanımlarında bu şekilde açıkça belirtilmiştir.

"Yap" değişken genişletmesine ve Bourne kabuk belirteçleştirmesine tabi özellikler, genellikle rastgele seçenekleri derleyicilere ve diğer araçlara iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts ve java_library.javacopts verilebilir. Bu ikameler, tek dizeli bir değişkenin yapılandırmaya özel seçenek kelimeleri listesine genişlemesini sağlar.

Etiket genişletme

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

genrule.cmd ve cc_binary.linkopts, örnek özelliklere örnek olarak verilebilir. Ayrıntılar, göreli etiketlerin genişletilip genişletilmediği ve birden çok dosyaya genişleyen etiketlerin nasıl ele alındığı gibi sorunlara göre her durumda önemli ölçüde farklılık gösterebilir. Ayrıntılı bilgi 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 (hepsi değil) özellikler açıklanmaktadır.

Özellik Açıklama
data

Etiket listesi; varsayılan []

Çalışma zamanında bu kural için gereken dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verir.

data özelliğindeki hedeflerin varsayılan çıkışları ve çalıştırma dosyaları, bu hedefin çıktısı olan veya bu hedefe çalışma zamanı bağımlılığı olan yürütülebilir tüm yürütülebilir öğelerin *.runfiles alanında görünmelidir. Bu, bu hedefin srcs'leri yürütüldüğünde kullanılan veri dosyalarını veya ikili programları içerebilir. Veri dosyalarına nasıl bağımlı olacağı ve verilerin nasıl kullanılacağı hakkında daha fazla bilgi için veri bağımlılıkları bölümüne bakın.

Yeni kurallar, çalışma zamanında başka girişler kullanabilecek girişleri işlerse bir data özelliği tanımlamalıdır. Kuralların uygulama işlevleri, hedefin çalıştırma dosyalarını da tüm data özelliklerinin çıkışları ve çalıştırma dosyalarından ve kaynak kodu veya çalışma zamanı bağımlılıkları sağlayan herhangi bir bağımlılık özelliğinden çalıştırma dosyalarından doldurmalıdır.

deps

Etiket listesi; varsayılan []

Bu hedefin bağımlılıkları. Genellikle yalnızca kural hedefleri listelenir. (Bazı kurallar dosyaların doğrudan deps içinde listelenmesine izin verse de mümkün olduğunda bundan kaçınılmalıdır.)

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

Bir hedefin deps kullanan bir başkasını temel almasının ne anlama geldiğine dair tam anlam, kural türüne özgüdür ve kurala özgü belgelerde daha ayrıntılı bir şekilde bahsedilir. Kaynak kodu işleyen kurallar için deps, genellikle srcs içindeki kodun kullandığı kod bağımlılıklarını belirtir.

deps bağımlılığı genellikle bir modülün aynı programlama dilinde yazılmış ve ayrı olarak derlenen başka bir modülde tanımlanan sembolleri kullanabilmesi için kullanılır. Diller arası bağımlılıklara birçok durumda izin verilir. Örneğin, java_library hedefi bir cc_library hedefindeki C++ koduna bağlı olabilir. Bunun için ikincisinin deps özelliğinde listelenmesi gerekir. Daha fazla bilgi için bağımlılıkların tanımına bakın.

licenses

Dize listesi; yapılandırılabilir olmayan; 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 bir parçasıdır. Bunu kullanmayın.

srcs

Etiket listesi; varsayılan []

Bu kural tarafından işlenen veya eklenen dosyalar. Genellikle dosyalar doğrudan listelenir ancak varsayılan çıkışlarını dahil etmek için kural hedefleri (filegroup veya genrule gibi) listelenebilir.

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

Tüm derleme kurallarında ortak özellikler

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

Özellik Açıklama
compatible_with

Etiket listesi; yapılandırılabilir olmayan; varsayılan []

Varsayılan olarak desteklenen ortamların yanı sıra bu hedefin derlenebileceği ortamların listesi.

Bu, Bazel'in hangi hedeflerin birbirine bağımlı olabileceğini ve kullanamayacağını bildirmesini sağlayan kısıtlama sisteminin bir parçasıdır. Örneğin, harici olarak dağıtılabilir ikili programlar şirket gizli kodu içeren kitaplıklara bağlı olmamalıdır. Ayrıntılar için ConstraintSemantics'i inceleyin.

deprecation

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

Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Bu genellikle bir hedefin eskidiğini veya başka bir kural tarafından yerini aldığını, bir pakete özel olduğunu ya da herhangi bir nedenle zararlı olduğunu bildirmek için kullanılır. İletiden kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca bulabilmesi için bir referans (web sayfası, hata numarası veya örnek taşıma CL'leri gibi) eklemek iyi bir fikirdir. Bunun yerine kullanabileceğiniz yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımak iyi bir fikirdir.

Bu özelliğin yapı oluşturma şekli üzerinde herhangi 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 hedefe bağlı olduğunda bir uyarı verir.

Paket içi bağımlılıklar bu uyarıdan muaftır. Böylece, örneğin, desteği sonlandırılmış bir kuralın testleri oluşturulduğunda bir uyarıyla karşılaşmazsınız.

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

Kullanıcılar artık uygulamayı kullanmayı bıraktıktan sonra hedef kaldırılabilir.

distribs

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

Bu özel 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 bir parçasıdır. Bunu kullanmayın.

exec_compatible_with

Etiket listesi; yapılandırılabilir olmayan; varsayılan []

Bu hedef için yürütme platformunda mevcut olması gereken constraint_values listesi. Bu, kural türü tarafından önceden ayarlanmış kısıtlamalara ek olarak sunulur. Kısıtlamalar, mevcut yürütme platformlarının listesini kısıtlamak için kullanılır. Daha fazla bilgi için araç zinciri çözünürlüğü açıklamasına bakın.

exec_properties

Dize sözlüğü; varsayılan {}

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

Bir anahtar hem platform hem de hedef düzeyindeki mülklerde mevcutsa değer hedeften alınır.

features

Özellik dizelerinin listesi; varsayılan olarak []

Ö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 etkinse ve bir hedefin features özelliği ["-a", "c"] içeriyorsa kural için etkinleştirilen özellikler "b" ve "c" olur. Örneği inceleyin.

restricted_to

Etiket listesi; yapılandırılabilir olmayan; varsayılan []

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

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

tags

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

Etiketler herhangi bir kuralda kullanılabilir. Testteki etiketler ve test_suite kuralları, testleri kategorize etmek için yararlıdır. Test dışı hedeflerdeki etiketler, genrule ve Starlark eylemlerinin korumalı alana alınmış yürütülmesini kontrol etmek ve gerçek kişiler ve/veya harici araçlar tarafından ayrıştırmak için kullanılır.

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

  • no-sandbox anahtar kelimesi, ilgili işlemle veya testin hiçbir zaman korumalı alana alınmamasıyla sonuçlanır; yine de önbelleğe alınabilir veya uzaktan çalıştırılabilir. Bunlardan birini veya ikisini birden önlemek için no-cache veya no-remote kullanın.
  • no-cache anahtar kelime, işlemle veya testin hiçbir zaman önbelleğe alınmamasına (uzaktan veya yerel olarak) neden oluyor
  • no-remote-cache anahtar kelimesi işlem veya test hiçbir zaman uzaktan önbelleğe alınmaz (ancak yerel olarak önbelleğe alınabilir; uzaktan da yürütülebilir). Not: Bu etiketin amaçları doğrultusunda, disk önbelleği yerel bir önbellek, http ve gRPC önbellekleri ise uzak olarak kabul edilir. Yerel disk önbelleği ile uzak önbelleğin bir kombinasyonu (birleşik önbellek) kullanılıyorsa bu önbellek, 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 kullanımına eş değerdir.
  • no-remote-cache-upload anahtar kelimesi, bir yumurtanın uzaktan önbelleğe alma işleminin bir kısmını yüklemenin bir kısmı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. Genrule ve testler için kuralı local = True özelliğiyle işaretlemek de aynı etkiye sahiptir.
  • requires-network anahtar kelimesi, korumalı alanın içinden harici ağa erişim izni verir. Bu etiketin etkisi yalnızca korumalı alan etkinleştirilirse etkilidir.
  • block-network anahtar kelimesi, korumalı alanın içinden harici ağa erişimi engelliyor. Bu durumda yalnızca localhost ile iletişime izin verilir. Bu etiketin etkisi yalnızca korumalı alan etkinleştirilirse etkilidir.
  • requires-fakeroot, testi veya işlemi uid ve gid 0 (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ğine göre önceliklidir.

Testlerdeki etiketler, genellikle hata ayıklama ve yayınlama sürecinizde testin rolüne ek açıklama eklemek için kullanılır. Etiketler genellikle, herhangi bir çalışma zamanı ek açıklaması özelliğinin bulunmadığı C++ ve Python testleri için yararlıdır. Etiketlerin ve boyut öğelerinin kullanılması, kod tabanı kontrol politikasına dayalı test paketlerinin derlenmesinde 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, testi "özel" modda çalıştırılmaya zorlayarak aynı anda başka testlerin çalıştırılmamasını sağlar. Bu tür testler, tüm derleme etkinliği ve münhasır olmayan testler tamamlandıktan sonra seri şekilde yürütülür. Bazel'in uzaktaki bir makinede çalıştırılan öğeler üzerinde kontrolü olmadığından bu tür testler için uzaktan yürütme devre dışı bırakılır.
  • exclusive-if-local, yerel olarak yürütülürse testi "özel" modda çalıştırılmaya zorlar, ancak uzaktan yürütülürse testi paralel olarak çalıştırır.
  • manual anahtar kelimesi; build, test ve coverage komutları için derlenecek/çalıştırılacak üst düzey hedef grubu hesaplanırken testi açıkça belirtmeyen hedef kalıbı joker karakterlerinin (..., :*, :all vb.) ve test_suite kurallarının genişletilmesinin önüne geçer. query komutu dahil olmak üzere diğer bağlamlarda hedef joker karakteri veya test paketi genişletmesini etkilemez. manual işlevinin, bir hedefin sürekli derleme/test sistemleri tarafından otomatik olarak oluşturulmaması/çalıştırılmaması gerektiğini ima etmediğini unutmayın. Örneğin, bir hedefin belirli Bazel işaretleri gerektirdiği ancak yine de düzgün yapılandırılmış ön gönderimlere veya sürekli test çalıştırmalarına dahil edildiğinden bazel test ... etiketinden hariç tutulması istenebilir.
  • external anahtar kelimesi, testi koşulsuz olarak yürütülmeye zorlar (--cache_test_results değerinden bağımsız olarak).
Test hedeflerine ekli etiketlerle ilgili diğer kurallar için Test Ansiklopedisi'ndeki Etiket Kuralları'na bakın.
target_compatible_with

Etiket listesi; varsayılan []

Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken constraint_value öğelerinin listesi. Bu, kural türü tarafından önceden ayarlanmış kısıtlamalara ek olarak yapılır. Hedef platform listelenen tüm kısıtlamaları karşılamıyorsa hedef incompatible olarak kabul edilir. Hedef kalıp genişletildiğinde (ör. //..., :all) uyumsuz hedefler derleme ve test adımları atlanır. Komut satırında açıkça belirtildiğinde uyumsuz hedefler Bazel'in bir hata yazdırmasına ve derleme ya da test hatasına neden olur.

Geçişli olarak uyumsuz hedeflere bağlı olan hedefler kendileri için uyumsuz olarak kabul edilir. Ayrıca, oluşturma ve test için atlanırlar.

Boş 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. Bazı kurallarda bu özelliğin herhangi bir etkisi yoktur. Ö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; yapılandırılmamış; test ve test paketi hedefleri hariç varsayılan değer False

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

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

Testler (*_test kural) ve test paketleri (test_suite kuralları) varsayılan olarak testonly şeklindedir.

Bu özelliğin amacı, hedefin üretime yayınlanan ikili programlara dahil edilmemesi gerektiğidir.

Yalnızca test sürümü çalışma zamanında değil, derleme zamanında uygulandığından ve bağımlılık ağacı üzerinden sanal olarak yayıldığından, mantıklı bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan saplama ve sahte öğeler, üretime yayınlanacak aynı ikili programları içeren entegrasyon testleri için de yararlı olabilir ve bu nedenle muhtemelen yalnızca test olarak işaretlenmemelidir. Bunun aksine, belki de koşulsuz olarak normal davranışı geçersiz kıldığı için bağlantı oluşturulması bile tehlikeli olan kurallar, kesinlikle yalnızca test amaçlı olarak işaretlenmelidir.

toolchains

Etiket listesi; yapılandırılabilir olmayan; varsayılan []

Bu hedefin Değişkenleri oluşturma özelliğine erişmesine izin verilen hedef grubu. Bu hedefler, TemplateVariableInfo sağlayan kural örnekleri veya Bazel'de yerleşik olarak bulunan araç zinciri türleri için özel hedeflerdir. Bunlardan bazıları:

  • @bazel_tools//tools/cpp:current_cc_toolchain
  • @bazel_tools//tools/jdk:current_java_runtime

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

visibility

Etiket listesi; yapılandırılmamış; belirtilmişse varsayılan olarak paket tarafından default_visibility, aksi takdirde "//visibility:private" kullanılır

Bir hedefteki visibility özelliği, hedefin diğer paketlerde kullanılıp kullanılamayacağını kontrol eder. Görünürlük ile ilgili belgeleri inceleyin.

Tüm test kurallarında ortak özellikler (*_test)

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

Özellik Açıklama
args

Dize listesi; $(location) ve "Değişken oluştur" değişikliğine ve Bourne kabuk belirtkeleme'ye tabidir. Varsayılan olarak []

bazel test ile yürütüldüğünde Bazel'in 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 herhangi bir --test_arg değerinden önce iletilir.

env

Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine tabidir; varsayılan olarak [] şeklindedir

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ız için "env" özelliği ekleyebilir ve TestEnvironment Sağlayıcısını doldurmak için kullanabilirsiniz.

env_inherit

Dize listesi; varsayılan değer: []

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'ın tanımladığı test kuralları için geçerli değildir.

size

Dize "enormous", "large", "medium" veya "small"; yapılandırılabilir değil; varsayılan değer "medium"

Bir test hedefinin "ağırlığını", yani çalıştırılması için ne kadar zaman/kaynak gerektiğini belirtir.

Birim testleri "küçük", entegrasyon testleri "orta" ve uçtan uca testler "büyük" veya "çok büyük" olarak kabul edilir. Bazel, timeout özelliği kullanılarak geçersiz kılınabilecek varsayılan zaman aşımını belirlemek için boyutu kullanır. Zaman aşımı, her bir test için değil, DERLE 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, aynı anda çok sayıda ağır test yürüterek --local_{ram,cpu}_resources değerine uymaya ve yerel makineyi yormamaya ç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ı
small 20 1 kısa (1 dakika)
medium 100 1 orta (5 dakika)
large 300 1 uzun (15 dakika)
devasa 800 1 eternal (60 dakika)

Testi üretirken TEST_SIZE ortam değişkeni, bu özelliğin değerine ayarlanır.

timeout

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

Geri dönmeden önce testin ne kadar süre boyunca çalıştırılmasının beklendiği.

Bir testin boyut özelliği kaynak tahminini kontrol ederken bir testin zaman aşımı süresi bağımsız olarak ayarlanabilir. Açıkça belirtilmediği takdirde zaman aşımı, test boyutuna göre belirlenir. Test zaman aşımı, --test_timeout işaretiyle geçersiz kılınabilir (ör. yavaş olduğu bilinen belirli koşullar altında çalışma). 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ıdakiler dışındaki zamanlarda test zaman aşımı, --test_timeout bazel işareti ile geçersiz kılınabilir (ör. yavaş olduğu bilinen koşullar altında manuel çalıştırma için). --test_timeout değerleri saniye cinsindendir. Örneğin --test_timeout=120, test zaman aşımını iki dakika olarak ayarlar.

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

flaky

Boole; nonYapılandırılabilir; varsayılan değer False

Testi hatalı olarak işaretler.

Politika ayarlanırsa testi üç kereye kadar yürütür ve yalnızca her seferinde başarısız olduğu durumlarda testi başarısız olarak işaretler. Varsayılan olarak, bu özellik Yanlış 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. Onayları onaylandığında testler güvenilir bir şekilde geçmelidir.

shard_count

Negatif olmayan tam sayı 50'den küçük veya 50'ye eşit; varsayılan -1

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

Bu değer ayarlanırsa bu değer, testin yürütüleceği paralel parça sayısını belirlemek için kullanılan tüm buluşsal yöntemleri geçersiz kılar. Bazı test kurallarında, parçalamayı etkinleştirmek için öncelikle bu parametrenin gerekli olabileceğini unutmayın. Ayrıca bkz. --test_sharding_strategy.

Test parçalama etkinleştirilirse, testi oluştururken ortam değişkeni TEST_TOTAL_SHARDS 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çada tüm testleri çalıştırır, bu da sizin istediğiniz şey değildir.

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

local

Boole; nonYapılandırılabilir; varsayılan değer False

Testi, korumalı alana alınmadan yerel olarak çalıştırılmaya zorlar.

Bunu Doğru değerine ayarlamak, etiket olarak "yerel" değerini sağlamakla eşdeğerdir (tags=["local"]).

Tüm ikili kurallarda ortak özellikler (*_ikili)

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

Özellik Açıklama
args

Dize listesi; $(location) ve "Değişken oluştur" ikameye ve Bourne kabuk belirtecilendirme'ye tabidir; yapılamaz; varsayılan [] şeklindedir

run komutu tarafından veya test olarak yürütüldüğünde Bazel'in 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/ uygulamasında ikili programı manuel olarak çalıştırarak) bağımsız değişkenler iletilmez.

env

Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine tabidir; varsayılan olarak {} şeklindedir

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/ uygulamasında ikili programı manuel olarak çalıştırarak) ortam değişkenleri ayarlanmaz.

output_licenses

Dize listesi; varsayılan değer: []

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

Yapılandırılabilir özellikler

Çoğu özellik "yapılandırılabilir" olduğundan, hedef farklı şekilde oluşturulduğunda bu özelliklerin değerleri değişebilir. Özellikle yapılandırılabilir özellikler, Bazel komut satırına iletilen işaretlere veya hedefi istediği aşağı akış bağımlılığının hangi faktörlere bağlı olarak değişiklik gösterebilir. Örneğin bu, hedefi birden fazla platform veya derleme modu için özelleştirmek amacıyla kullanılabilir.

Aşağıdaki örnekte farklı hedef mimariler için farklı kaynaklar açıklanmaktadır. bazel build :multiplatform_lib --cpu x86 çalıştırıldığında hedef x86_impl.cc kullanılarak derlenirken --cpu arm değiştirilirse arm_impl.cc kullanılır.

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

Bazel, yapılandırılabilir özellikleri makroları işlendikten sonra ve kuralları işlemeden önce (teknik olarak yükleme ve analiz aşamaları arasında) değerlendirir. select() değerlendirmesinden önceki işlemlerde select() öğesinin hangi dalı seçtiği bilmez. Örneğin, makrolar seçilen dala göre davranışlarını değiştiremez ve bazel query, hedefin yapılandırılabilir bağımlılıkları hakkında yalnızca dikkatli tahminlerde bulunabilir. select() öğesini kurallar ve makrolarla kullanma hakkında daha fazla bilgi için bu SSS bölümüne bakın.

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

Ayrıntılı bir genel bakış için Yapılandırılabilir Derleme Özellikleri bölümüne bakın.

Dolaylı çıkış hedefleri

C++'taki örtülü çıkışlar kullanımdan kaldırılmıştır. Lütfen mümkünse başka dillerde kullanmaktan kaçının. Henüz bir kullanımdan kaldırma sürecimiz yok, ancak bu araçlar da bir süre sonra kullanımdan kaldırılacak.

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

Dolaylı çıkış hedefleri, global hedef grafiğin birinci sınıf üyeleridir. Diğer hedeflerde olduğu gibi bu hedefler de üst düzey derleme komutta belirtildiklerinde veya diğer derleme hedefleri için gerekli ön koşullar olduğunda isteğe bağlı olarak oluşturulur. BUILD dosyalarında bağımlılık olarak değerlendirilebilir ve bazel query gibi analiz araçlarının çıktısında gözlemlenebilirler.

Her derleme kuralı türü için kuralın dokümanlarında, bu tür bir kuralın bildirilmesiyle ilişkili tüm örtülü çıkışların adlarının ve içeriğinin ayrıntılı olarak açıklandığı özel bir bölüm bulunur.

Derleme sistemi tarafından kullanılan iki ad alanı arasındaki önemli ancak biraz ince bir fark: Etiketler, kural veya dosya olabilecek hedefleri tanımlar ve dosya hedefleri, kaynak (veya giriş) dosya hedefleri ve türetilmiş (veya çıkış) dosya hedeflerine ayrılabilir. Bunlar BUILD dosyalarında belirtebileceğiniz, komut satırından derleyebileceğ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 veya bir veya daha fazla gerçek dosyaya karşılık gelebilir. Diskte karşılık gelen bir hedefi olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında oluşturulan .o nesne dosyalarına BUILD dosyaları içinden veya komut satırından referans verilemez. Böylece, derleme aracı işini nasıl yaptığına dair bazı uygulama ayrıntılarını gizleyebilir. Bu konu Derleme Kavram Referansı bölümünde daha kapsamlı bir şekilde açıklanmaktadır.