Yaygın tanımlar

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 tokenizasyon kurallarına göre birden fazla kelimeye bölünür: Tırnak içinde olmayan boşluklar ayrı kelimeleri sınırlar. Tokenleştirmeyi önlemek için tek ve çift tırnak karakterleri ile ters eğik çizgiler kullanılır.

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

"Make" değişken genişletmesine ve Bourne kabuğu belirtkelemeye tabi olan özellikler, genellikle derleyicilere ve diğer araçlara rastgele seçenekleri geçirmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts ve java_library.javacopts verilebilir. Bu değişiklikler 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 //mypkg:target gibi alt dize olarak geçerli bir etiket içeriyorsa ve bu etiket mevcut kuralın bildirilmiş ön koşuluysa hedef //mypkg:target tarafından 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, göreli etiketlerin genişletilip genişletilmediği, birden fazla dosyaya genişleyen etiketlerin nasıl ele alındığı vb. gibi sorunlarda önemli ölçüde farklılık gösterebilir. 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, hepsi olmasa da birçok derleme kuralı tarafından tanımlanan özellikler açıklanmaktadır.

Özellik Açıklama
data

List of labels ; optional

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 yürütülebilir dosyaların *.runfiles alanında görünmelidir. Buna, bu hedefin srcs öğesi yürütüldüğünde kullanılan veri dosyalarını veya ikili programları içerebilir. Veri dosyalarına nasıl güveneceğiniz ve bu dosyaları nasıl kullanacağınız 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ı herhangi bir data özelliğinin çıkış 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ğindeki çalıştırma dosyalarından da doldurmalıdır.

deps

List of labels ; optional

Bu hedefe ilişkin bağımlılıklar. Genellikle yalnızca kural hedeflerini listelemelidir. (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ılar içerenlerle sınırlar.

Bir hedefin başka bir deps kullanarak bağımlı olmasının ne anlama geldiği, 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 aynı programlama dilinde yazılmış ve ayrı olarak derlenmiş başka bir modülde tanımlanmış sembolleri kullanmasına izin vermek için kullanılır. Diller arası bağımlılıklara birçok durumda izin verilir: Örneğin, java_library hedefi, cc_library hedefindeki C++ kodunu deps özelliğinde listeleyerek C++ koduna bağlı olabilir. Daha fazla bilgi için bağımlılıkların tanımına bakın.

licenses

List of strings; optional; nonconfigurable

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

srcs

List of labels ; optional

Bu kural tarafından işlenen veya dahil edilen dosyalar. Dosyaları genellikle doğrudan listeler ancak varsayılan çıkışlarını 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

List of labels ; optional; nonconfigurable

Varsayılan olarak 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 bağlı olmamalıdır. Ayrıntılar için ConstraintSemantics bölümüne bakın.

deprecation

String; optional; nonconfigurable

Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Genellikle bu, kullanıcılara bir hedefin geçerliliğini yitirdiğini veya yerini başka bir kural aldığını, bir pakete özel olduğunu ya da herhangi bir nedenle zararlı olarak değerlendirildiğini bildirmek için kullanılır. İletiden kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca bulabilmek amacıyla bazı referanslar (web sayfası, hata numarası veya örnek taşıma CL'leri gibi) eklemek iyi bir fikirdir. Bunun yerine kullanılabilen yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımak iyi bir fikirdir.

Bu özelliğin, öğelerin oluşturulma şekli üzerinde herhangi bir etkisi yoktur ancak bir derleme aracının teşhis çıkışını etkileyebilir. Derleme aracı, deprecation özelliği olan bir kural başka paketteki bir hedefe bağımlı olduğunda bir uyarı yayınlar.

Paket içi bağımlılıklar bu uyarıdan muaftır. Böylece, örneğin, kullanımdan kaldırılan bir kuralın testlerini oluştururken uyarı verilmez.

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 bu uygulamayı kullanmayı bıraktıktan sonra hedef kaldırılabilir.

distribs

List of strings; optional; nonconfigurable

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

exec_compatible_with

List of labels ; optional; nonconfigurable

Bu hedef için yürütme platformunda olması gereken constraint_values listesi. Bu, kural türü tarafından halihazırda belirlenen tüm kısıtlamalara ek olarak yapılı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 araç zinciri çözünürlüğü açıklamasına bakın.

exec_properties

Dictionary of strings; optional

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

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

features

List of feature strings; optional

Özellik, bir hedefte etkinleştirilebilen veya devre dışı bırakılabilen dize etiketidir. Ö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

List of labels ; optional; nonconfigurable

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

List of strings; optional; nonconfigurable

Etiketler herhangi bir kuralda kullanılabilir. Test ve test_suite kurallarındaki etiketler, testleri kategorilere ayırmak için yararlıdır. Test dışı hedeflerdeki etiketler, genrule ve Starlark işlemlerinin korumalı alana alınmış yürütülmesini kontrol etmek ve insanlar tarafından 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ının içinde aşağıdaki anahtar kelimeleri bulursa korumalı alan kodunun davranışını değiştirir.

  • no-sandbox anahtar kelime, işlem veya test hiçbir zaman korumalı alana alınmaz; 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.
  • İşlem veya testle sonuçlanan no-cache anahtar kelime sonucu hiçbir zaman önbelleğe alınmaz (uzaktan veya yerel olarak)
  • no-remote-cache anahtar kelime, eylem veya testle 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 olarak kabul edilirken http ve gRPC önbellekleri uzak olarak kabul edilir. Birleşik bir önbellek belirtilirse (ör. yerel ve uzak bileşenlere sahip bir önbellek) uzak önbellek olarak değerlendirilir ve yerel bileşenler kullanılacak --incompatible_remote_results_ignore_disk ayarlanmadığı sürece tamamen devre dışı bırakılır.
  • no-remote-exec anahtar kelime, 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 spawn uzaktan önbelleğe alma işleminin bir kısmını yüklemeyi 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 etkili olması için korumalı alan özelliğinin etkinleştirilmesi gerekir.
  • block-network anahtar kelime, korumalı alanın içinden harici ağa erişimi engeller. Bu durumda yalnızca localhost ile iletişime izin verilir. Bu etiketin etkili olması için korumalı alan özelliğinin etkinleştirilmesi gerekir.
  • requires-fakeroot, testi veya işlemi uid ve gid 0 (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ürecindeki rolüne açıklama eklemek için kullanılır. Etiketler genellikle en çok çalışma zamanı notu özelliği olmayan C++ ve Python testlerinde yararlıdır. Etiketlerin ve boyut öğelerinin kullanılması, test paketlerinin derlenmesinde kod tabanı check-in politikasına göre 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 "dışlayıcı" 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 modunda 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ülürse testi "hariç" 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 hedefler grubunu hesaplarken hedefi, hedef kalıbı joker karakterleri (..., :*, :all vb.) ve test_suite kurallarının genişletilmesinden hariç tutar. query komutu dahil olmak üzere diğer bağlamlarda hedef joker karakter veya test paketi genişletmesini etkilemez. manual ifadesinin, 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 flag'leri gerektirdiği halde hedef yine de düzgün şekilde yapılandırılmış ön gönderme veya sürekli test çalıştırmalarına dahil edildiğinden bazel test ... hedefinden hariç tutmak isteyebilirsiniz.
  • external anahtar kelime, testi koşulsuz olarak yürütülmeye 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ı'na bakın.
target_compatible_with

List of labels ; optional

Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda olması gereken constraint_value listesi. Bu, kural türü tarafından önceden belirlenen tüm 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ıbı genişletildiğinde (ör. //..., :all) uyumlu olmayan hedefler, derleme ve test için atlanır. Komut satırında açıkça belirtildiğinde, uyumsuz hedefler Bazel'ın hata yazdırmasına ve derleme veya test hatasına neden olur.

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

Boş liste (varsayılandır), hedefin tüm platformlarla uyumlu olduğunu gösterir.

Workspace Kuralları dışındaki tüm kurallar bu özelliği destekler. Bu özelliğin bazı kurallarda etkisi yoktur. Örneğin, bir 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

Boolean; optional; default False except for test and test suite targets; nonconfigurable

Doğru değerine ayarlanırsa yalnızca test hedefleri (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 programlara dahil edilmemesi gerektiğini ifade eder.

Testonly, çalışma zamanında değil, derleme zamanında zorunlu kılındığı ve bağımlılık ağacı üzerinden sanal olarak yayıldığı için mantıklı bir şekilde uygulanmalıdır. Örneğin, birim testlerinde işe yarayan koçanlar ve sahteler, üretime yayınlanacak aynı ikili programları içeren entegrasyon testleri için de yararlı olabilir. Bu nedenle, muhtemelen yalnızca test olarak işaretlenmemeleri gerekir. Öte yandan, belki de koşulsuz olarak normal davranışı geçersiz kıldığı için bağlanması bile tehlikeli olan kurallar, kesinlikle test salt test olarak işaretlenmelidir.

toolchains

List of labels ; optional; nonconfigurable

Bu hedefin Değişkenleri oluşturma iznine sahip olduğu 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 cc_toolchain veya java_toolchain kullanacağını belirlemek için bu özelliği kullanamazsınız.

visibility

List of labels ; optional; default default_visibility from package if specified, or //visibility:private otherwise; nonconfigurable

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 özellikler (*_test)

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

Özellik Açıklama
args

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization

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

env

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

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

env_inherit

List of strings; optional

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

String "enormous", "large" "medium" or "small", default is "medium"; optional; nonconfigurable

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, varsayılan zaman aşımını belirlemek için boyutu kullanır. Varsayılan zaman aşımı değeri, timeout özelliği kullanılarak geçersiz kılınabilir. Zaman aşımı her 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 programlama 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 çekirdek sayısı) 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, testi oluştururken bu özelliğin değerine ayarlanır.

timeout

String "short", "moderate", "long", "eternal" (with the default derived from the test's size attribute); nonconfigurable

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

Bir testin boyut özelliği kaynak tahminini kontrol eder, ancak 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şullar altında çalışmak 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 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ırmak 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 oluştururken test zaman aşımına (saniye cinsinden) ayarlanır.

flaky

Boolean; optional; default False; nonconfigurable

Testi güvenilir olarak işaretler.

Ayarlanırsa testi en fazla üç kez yürütür ve yalnızca her başarısız olduğunda 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

Non-negative integer less than or equal to 50; optional

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

Bu değer, testin çalıştırılacağı paralel parçaların sayısını belirlemek için kullanılan tüm buluşsal yöntemleri geçersiz kılar. Bazı test kurallarında, parçalamayı öncelikle etkinleştirmek için bu parametrenin gerekli olabileceğini unutmayın. --test_sharding_strategy sayfasına da göz atın.

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

Parçalama için test çalıştırıcının test parçalama protokolünü desteklemesi gerekir. Aksi takdirde, büyük olasılıkla her parçada her testi çalıştırır. Ancak bu, istediğiniz değildir.

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

local

Boolean; default False; nonconfigurable

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

Bunu Doğru değerine ayarlamak, etiket olarak "yerel" değeri sağlamakla (tags=["local"]) 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

List of strings; optional; subject to $(location) and "Make variable" substitution, and Bourne shell tokenization; nonconfigurable

run komutuyla veya test olarak çalıştırıldığında Bazel'ın hedefe aktaracağı 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 aktarılır.

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

Dictionary of strings; optional; values are subject to $(location) and "Make variable" substitution

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

output_licenses

List of strings; optional

Bu ikili programın oluşturduğu çıkış dosyalarının lisansları. Bu, Bazel'ın artık kullanmadığı, kullanımdan kaldı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"dir. Diğer bir deyişle, hedef farklı şekillerde oluşturulduğunda değerlerin değerleri değişebilir. Özellikle, yapılandırılabilir özellikler, Bazel komut satırına iletilen işaretlere veya hedef için 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 derlenir, --cpu arm yerine kullanılması ise hedefin arm_impl.cc kullanması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, hedef yapılandırmasının karşıladığı config_setting veya constraint_value ölçütüne bağlı olarak yapılandırılabilir bir özellik için farklı alternatif değerler arasından seçim yapar.

Bazel, makrolar işlendikten sonra 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 işlemler, select() uygulamasının hangi dalı seçtiğini bilemez. Örneğin, makrolar, davranışlarını seçilen dala göre değiştiremez ve bazel query, bir hedefin yapılandırılabilir bağımlılıkları hakkında yalnızca ihtiyatlı tahminler yapabilir. Kurallar ve makrolarla select() kullanımı hakkında daha fazla bilgi için bu SSS sayfasını inceleyin.

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

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

Örtülü çıkış hedefleri

C++'taki dolaylı çı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 onlar da zaman içinde kullanımdan kaldırılacaktır.

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, dolaylı olarak da içerikleri ve anlamları kurala özgü olan bir veya daha fazla çıkış dosyası hedefi içerir. Örneğin, açık bir şekilde java_binary(name='foo', ...) kuralı bildirdiğinizde foo_deploy.jar çıkış dosyası hedefini aynı paketin üyesi olarak dolaylı olarak bildirmiş olursunuz. (Bu hedef, dağıtıma uygun bağımsız bir Java arşividir.)

Örtük çıkış hedefleri, küresel hedef grafiğinin birinci sınıf üyeleridir. Diğer hedeflerde olduğu gibi, üst seviyedeki oluşturulmuş komutta belirtildiklerinde veya diğer derleme hedefleri için gerekli ön koşullar karşılandığında isteğe bağlı olarak oluşturulurlar. DERLEME dosyalarında bağımlılık olarak bunlara başvurulabilir 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 bildirilmesine neden olan örtülü çıkışların adlarını ve içeriklerini ayrıntılı şekilde açıklayan özel bir bölüm bulunur.

Derleme sistemi tarafından kullanılan iki ad alanı arasındaki önemli ancak küçük bir ayrım: Etiketler, kurallar veya dosyalar olabilecek hedefleri tanımlar. Dosya hedefleri ise kaynak (veya giriş) dosya hedefleri ile türetilmiş (veya çıkış) dosya hedeflerine bölünebilir. Bunlar DERLEME dosyalarında bahsedebilir, komut satırından derleme yapabilir veya bazel query kullanarak 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 oluşturulan .o nesne dosyalarına BUILD dosyalarının 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 konu, DERLEME Başvurusu bölümünde daha ayrıntılı bir şekilde açıklanmıştır.