Yaygın tanımlar

Sorun bildirin Kaynağı göster

Bu bölümde, birçok işlevde veya kural oluşturma işleminde ortak olan çeşitli terimler ve kavramlar açıklanmaktadır.

İçindekiler

Bourne kabuğu belirtkeleme

Bazı kuralların belirli dize özellikleri, Bourne kabuğunun şifreleme kurallarına göre birden çok kelimeye ayrılır: Tırnak içinde olmayan alanlar ayrı kelimeleri sınırlar. Jetonlara ayırma işlemini önlemek için tek ve çift tırnak karakterleri ve ters eğik çizgiler kullanılır.

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

"Make" değişken genişletmesine ve Bourne kabuğu jetona dönüştürmeye 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 birlikte, tek bir dize değişkeninin yapılandırmaya özel 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 //mypkg:target gibi geçerli bir etiket içeriyorsa ve bu etiket, mevcut kuralın bildirilmiş 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. Göreli etiketlerin genişletilip genişletilmediği, birden fazla dosyaya genişleyen etiketlerin nasıl ele alındığı vb. gibi sorunlar söz konusu olduğunda ayrıntılar her durumda önemli ölçüde farklılık gösterebilir. Ayrıntılar için kural özelliği belgelerini inceleyin.

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

Bu bölümde, hepsi olmasa da birçok derleme kuralı tarafından tanımlanan özellikler açıklanmaktadır.

Özellik Açıklama
data

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

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ıştırma dosyaları, bu hedef tarafından çıkış yapılan veya bu hedef üzerinde çalışma zamanı bağımlılığı olan tüm yürütülebilir dosyaların *.runfiles alanında görünmelidir. Bu, bu hedefin srcs komutu yürütüldüğünde kullanılan veri dosyalarını veya ikili programları içerebilir. Veri dosyalarına nasıl bağımlı olacağı ve 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şliyorlarsa bir data özelliği tanımlamalıdır. Kuralların uygulama işlevleri, hedefin çalıştırma dosyalarını herhangi bir data özelliğinin çıkış ve çalıştırma dosyalarının yanı sıra kaynak kodu veya çalışma zamanı bağımlılıkları sağlayan herhangi bir bağımlılık özelliğindeki çalıştırma dosyalarından da doldurmalıdır.

deps

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

Bu hedefe ilişkin bağımlılıklar. Genellikle yalnızca kural hedefleri listelenmelidir. (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, genellikle listelenen hedefleri belirli sağlayıcılara sahip olanlarla sınırlar.

Bir hedefin deps kullanarak başka bir hedefe bağlı olmasının ne anlama geldiğine dair kesin anlamlar, kural türüne özeldir ve kurala özel belgelerde daha ayrıntılı bilgi verilmektedir. Kaynak kodunu 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 deps bağımlılığı, bir modülün başka bir modülde aynı programlama dilinde yazılmış ve ayrı olarak derlenmiş sembolleri kullanmasına izin vermek için kullanılır. Diller arası bağımlılıklara çoğu durumda izin verilir: Örneğin, bir java_library hedefi, cc_library hedefindeki C++ kodunu deps özelliğinde listeleyerek C++ koduna bağlı olabilir. Daha fazla bilgi için dependencies tanımına bakın.

licenses

Dize listesi; yapılandırılabilir değildir; varsayılan: ["none"]

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

srcs

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

Bu kural tarafından işlenen veya eklenen dosyalar. Genellikle dosyaları doğrudan listeler ancak varsayılan çıkışları eklemek için 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ı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 değildir; varsayılan: []

Varsayılan desteklenen ortamların yanı sıra, bu hedefin oluşturulabileceği ortamların listesi.

Bu, kullanıcıların hangi hedeflerin birbirine bağlı olup olamayacağını bildirmesine olanak tanıyan Bazel kısıtlama sisteminin bir parçasıdır. Örneğin, harici olarak dağıtılabilir ikili programlar, şirket gizli koduna sahip kitaplıklara dayalı olmamalıdır. Ayrıntılar için ConstraintSemantics'e bakın.

deprecation

Dize; yapılandırılabilir değildir; varsayılan değer: None

Bu hedefle ilişkili bir açıklayıcı uyarı mesajı. Genellikle bu, kullanıcılara bir hedefin geçerliliğini yitirdiğini veya yerini başka bir kuralla değiştirdiğini, bir pakete özel olduğunu ya da herhangi bir nedenle zararlı olarak değerlendirildiğini kullanıcılara bildirmek için kullanılır. Mesajdan kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca bulabilmesi amacıyla bazı referanslar (web sayfası, hata numarası veya örnek taşıma CL'leri gibi) eklemek iyi bir fikirdir. Yerine düşürme 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 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ğımlıysa bir uyarı yayınlar.

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

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

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

distribs

Dize listesi; yapılandırılabilir değildir; varsayılan: []

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

exec_compatible_with

Etiket listesi; yapılandırılabilir değildir; varsayılan: []

Bu hedef için yürütme platformunda bulunması gereken constraint_values listesi. Bu işlem, kural türü tarafından önceden belirlenmiş tüm kısıtlamalara ek olarak yapılır. 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 değer: {}

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

Hem platformda hem de hedef düzeyindeki mülklerde bir anahtar varsa değer hedeften alınır.

features

Özellik dizelerinin listesi; varsayılan değer: []

Ö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ş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.

restricted_to

Etiket listesi; yapılandırılabilir değildir; varsayılan: []

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

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

tags

Dize listesi; yapılandırılabilir değildir; varsayılan: []

Etiketler herhangi bir kuralda kullanılabilir. Test üzerindeki etiketler ve test_suite kuralları, testlerin sınıflandırılmasında yararlıdır. Test dışı hedeflerdeki etiketler, genrule ve Starlark işlemlerinin korumalı alana alınmış olarak 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 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 korumalı alana alma kodunun davranışını değiştirir.

  • no-sandbox anahtar kelimesi işlem sonucunda hiçbir zaman korumalı alana alınmaz veya teste dahil edilmez. Yine de önbelleğe alınabilir veya uzaktan çalıştırılabilir. Bunlardan birini ya da ikisini birden önlemek için no-cache veya no-remote kullanın.
  • no-cache anahtar kelimesi, işlemle veya testle sonuçlanır ve hiçbir zaman önbelleğe alınmaz (yerel veya uzaktan). Not: Bu etiketin amaçları doğrultusunda disk önbelleği yerel önbellek olarak kabul edilirken HTTP ve gRPC önbellekleri uzak olarak kabul edilir. Skyframe veya kalıcı işlem önbelleği gibi diğer önbellekler etkilenmez.
  • no-remote-cache anahtar kelimesi, işlemle sonuçlanır veya 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 önbellek olarak kabul edilirken HTTP ve gRPC önbellekleri uzak olarak kabul edilir. Skyframe veya kalıcı işlem önbelleği gibi diğer önbellekler etkilenmez. Yerel disk önbelleği ve uzak önbelleğin (birleşik önbellek) bir kombinasyonu kullanılırsa bu, uzak önbellek olarak değerlendirilir ve --incompatible_remote_results_ignore_disk ayarlanmadığı sürece yerel bileşenler kullanılacak şekilde ayarlanmadığı sürece tamamen devre dışı bırakılır.
  • no-remote-exec anahtar kelimesi, işlemle veya testle hiçbir zaman uzaktan yürütülmez (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 sonucun uzaktan önbelleğe alınmasının bir bölümünün yüklenmesini 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ı alan içinde çalıştırılmasını engeller. Türler 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şim sağlar. Bu etiketin etkisi yalnızca korumalı alan oluşturma etkinse etkin olur.
  • block-network anahtar kelime, 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 oluşturma etkinse etkin olur.
  • requires-fakeroot, testi veya işlemi uid ve gid 0 (ör. kök kullanıcı) olarak çalıştırır. Bu 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 en çok, çalışma zamanı ek açıklaması yapma özelliğine sahip olmayan C++ ve Python testlerinde yararlıdır. Etiket ve boyut öğelerinin kullanılması, test paketlerini kod tabanı check-in politikasına göre derlerken 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ışmamasını sağlar. Bu tür testler, tüm derleme etkinliği ve münhasır olmayan testler tamamlandıktan sonra seri tarzda yürütülür. Bazel'in uzak bir makinede çalıştırılanlar üzerinde kontrol sahibi olmadığından bu testler için uzaktan yürütme devre dışıdır.
  • exclusive-if-local, yerel olarak yürütülen testi "hariç tutulan" modda çalıştırılmaya zorlar ancak uzaktan çalıştırıldığında testi paralel olarak çalıştırır.
  • manual anahtar kelimesi, hedefi, hedef kalıbı joker karakterleri (..., :*, :all vb.) ve test_suite kurallarının genişletilmesinden hariç tutar. Bu kurallar, build, test ve coverage komutları için derlenecek/çalıştırılacak üst düzey hedefler grubunu hesaplarken testi açıkça listelemez. query komutu dahil olmak üzere diğer bağlamlarda hedef joker karakter veya test paketi genişletmesini etkilemez. manual yönergesinin, bir hedefin sürekli derleme/test sistemleri tarafından otomatik olarak derlenmemesi/çalışmaması gerektiği anlamına gelmediğini unutmayın. Örneğin, belirli Bazel işaretleri gerektirdiği ancak yine de düzgün yapılandırılmış ön gönderim veya sürekli test çalıştırmalarına dahil edilen bir hedefin bazel test ... kapsamından 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 eklenmiş etiketler hakkında 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: []

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

Geçişli olarak uyumsuz hedeflere bağımlı olan hedeflerin kendileri uyumsuz olarak kabul edilir. Ayrıca derleme ve test için atlanırlar.

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

Çalışma Alanı 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 faydalı değildir.

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

testonly

Boole; yapılandırılabilir değildir; 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.

Diğer bir deyişle, testonly olmayan bir kural, testonly olan herhangi bir kurala bağlı olamaz.

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

Bu özelliğin amacı, hedefin üretime yayınlanan ikili programlarda yer almaması gerektiği anlamına gelir.

Testonly derleme zamanında zorunlu kılındığı ve bağımlılık ağacı üzerinden sanal olarak yayıldığı için makul bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan saplamalar ve sahteler, üretime yayınlanacak aynı ikili programları içeren entegrasyon testlerinde de yararlı olabilir ve bu nedenle muhtemelen yalnızca test olarak işaretlenmemelidir. Öte yandan, normal davranışı koşulsuz olarak geçersiz kıldığı için belki bağlantı verilmesi bile tehlikeli olan kurallar kesinlikle test salt test olarak işaretlenmelidir.

toolchains

Etiket listesi; yapılandırılabilir değildir; varsayılan: []

Bu hedefin erişmesine izin verilen Değişkenleri oluşturma izni olan hedefler grubu. Bu hedefler, TemplateVariableInfo sağlayan kural örnekleri veya Bazel'da yerleşik olan 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 cc_toolchain veya java_toolchain öğesini kullanacağını belirlemek için bu özelliği kullanamazsınız.

visibility

Etiket listesi; yapılandırılabilir değildir; varsayılan değer, belirtilirse paketten default_visibility veya aksi takdirde "//visibility:private" şeklindedir

Bir hedefteki visibility özelliği, hedefin diğer paketlerde kullanılıp kullanılamayacağını kontrol eder. Görünürlük için dokümanlara bakın.

Tüm test kurallarında ortak olan ö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 kabuğu belirteçleştirme'ye tabidir; varsayılan değer []'tır

bazel test ile çalıştırıldığında Bazel'ın 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 tüm --test_arg değerlerinden önce aktarılır.

env

Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine 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 tarafından tanımlanan test kuralları için geçerli değildir. Kendi Starlark kurallarınız için "env" özelliği ekleyebilir ve bunu bir TestEnvironment Sağlayıcısı doldurmak için kullanabilirsiniz.

env_inherit

Dize listesi; varsayılan: []

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

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

Test hedefinin "ağırlığını", yani çalışması için ne kadar süre/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ınabilen varsayılan zaman aşımını belirlemek için boyutu kullanır. Zaman aşımı her bir test için değil, DERLEME hedefindeki tüm testler için geçerlidir. Test yerel olarak çalıştırıldığında, size ayrıca planlama amacıyla kullanılır: Bazel, --local_{ram,cpu}_resources politikasını dikkate almaya ve aynı anda çok sayıda ağır test çalıştırarak yerel makineyi bunaltmamaya ç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 çekirdeği cinsinden) 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 sonsuz (60 dakika)

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

timeout

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

Geri dönmeden önce testin ne kadar sürmesinin beklendiği.

Bir testin boyut özelliği kaynak tahminini kontrol etse de testin zaman aşımı bağımsız olarak ayarlanabilir. Açıkça belirtilmediği takdirde, zaman aşımı testin boyutuna bağlıdır. Test zaman aşımı --test_timeout işaretiyle geçersiz kılınabilir (ör. yavaş olduğu bilinen belirli koşullarda çalışırken). 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 düzey 5 dakika
uzun 15 dakika
sonsuz 60 dakika

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

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

flaky

Boole; yapılandırılabilir değildir; varsayılan False

Testi güvenilir değil olarak işaretler.

Ayarlanırsa testi en fazla üç kez yürütür ve yalnızca her seferinde başarısız olursa başarısız olarak işaretlenir. 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ı genellikle önerilmez. 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.

Ayarlanırsa bu değer, testin çalıştırılacağı 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, ilk olarak parçalamayı etkinleştirmek için bu parametrenin gerekli olabileceğini unutmayın. Ayrıca --test_sharding_strategy politikasına bakın.

Parçalama testi 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. Eşleşmiyorsa büyük olasılıkla her bir parçada her test çalıştırılacaktır. İstediğiniz şey bu değildir.

Parçalama ile ilgili ayrıntılar için Test Ansiklopedisi'nde Parçalama Testi bölümüne bakın.

local

Boole; yapılandırılabilir değildir; varsayılan False

Testi, korumalı alan olmadan yerel olarak çalıştırılmaya zorlar.

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

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

Bu bölümde, tüm ikili program 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 kabuğu belirteçleştirmesine tabidir; yapılandırılabilir değildir; varsayılan olarak []

run komutuyla veya test olarak yürütüldüğünde Bazel'ın 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 geçirilir.

NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, ikili dosyayı bazel-bin/ ürününde 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 değer {}'dir

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, ikili dosyayı bazel-bin/ ürününde manuel olarak çalıştırarak) ortam değişkenleri ayarlanmaz.

output_licenses

Dize listesi; varsayılan: []

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

Yapılandırılabilir özellikler

Çoğu özellik "yapılandırılabilir"dir. Diğer bir deyişle, hedef farklı şekilde oluşturulduğunda özellik değerleri değişebilir. Özellikle, yapılandırılabilir özellikler, Bazel komut satırına iletilen işaretlere veya hedefi hangi aşağı akış bağımlılığının istediğine bağlı olarak değişiklik gösterebilir. Bu, örneğin, 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 oluşturulur, --cpu arm ile 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 karşıladığı config_setting veya constraint_value kriterlerine bağlı olarak yapılandırılabilir bir özellik için farklı alternatif değerler arasından seçim yapar.

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

Dokümanlarında nonconfigurable olarak işaretlenmiş özellikler bu özelliği kullanamaz. Bir select() öğesinin nasıl çözümleneceğini belirlemeden önce Bazel'ın kendi değerini bilmesi gerektiğinden, özellikler genellikle yapılandırılamaz.

Ayrıntılı genel bakış için Yapılandırılabilir Derleme Özellikleri'ne bakın.

Örtülü çıkış hedefleri

C++'taki dolaylı çıkışlar kullanımdan kaldırılmıştır. Mümkün olduğunda lütfen bunu başka dillerde kullanmaktan kaçının. Henüz bir kullanımdan kaldırma sürecimiz yok ancak bunlar da bir süre sonra kullanımdan kaldırılacak.

DERLEME dosyasında bir derleme kuralı tanımladığınızda paket içinde, yeni ve adlandırılmış bir kural hedefini açıkça bildirmiş 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 bir şekilde bildirdiğinizde foo_deploy.jar çıkış dosyası hedefini aynı paketin üyesi olarak dolaylı olarak bildirmiş olursunuz. (Bu özel hedef, dağıtım için uygun olan bağımsız bir Java arşividir.)

Örtülü çıkış hedefleri, küresel hedef grafiğinin birinci sınıf üyeleridir. Diğer hedeflerde olduğu gibi, üst düzeydeki oluşturulmuş komutta belirtildiklerinde veya diğer derleme hedefleri için gerekli ön koşullar olduklarında isteğe bağlı olarak oluşturulurlar. Bunlar, BUILD dosyalarında bağımlılık olarak referans gösterilebilir 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 bildiriminin gerektirdiği örtülü çıkışların adlarını ve içeriklerini ayrıntılı şekilde veren özel bir bölüm bulunur.

Derleme sistemi tarafından kullanılan iki ad alanı arasındaki önemli ancak küçük bir fark vardır: Etiketler, kural veya dosya olabilecek hedefleri tanımlar. Dosya hedefleri, kaynak (veya giriş) dosyası hedeflerine ve türetilmiş (veya çıkış) dosya hedeflerine bölünebilir. DERLEME dosyalarında bahsedebilir, komut satırından derleme yapabilir veya bazel query kullanarak bunları inceleyebilirsiniz. Bu 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 bir hedefe sahip olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında üretilen .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 belirli uygulama ayrıntılarını gizleyebilir. Bu, BUILD Concept Reference (Kavram Referansı) bölümünde daha ayrıntılı bir şekilde açıklanmıştır.