Yaygın tanımlar

Sorun bildirin Kaynağı göster

Bu bölümde, birçok işlev veya kural için yaygın olarak kullanılan çeşitli terimler ve kavramlar tanımlanmaktadır.

İçindekiler

Bourne kabuğu jetona dönüştürme

Bazı kuralların belirli dize özellikleri, Bourne shell'in jetonlara ayırma kurallarına göre birden çok kelimeye bölünür: Tırnak işareti içermeyen alanlar ayrı kelimeleri sınırlandırır. Jetonların engellenmesi için tek ve çift tırnak karakterleri ile ters eğik çizgiler kullanılır.

Bu jetona tabi olan özellikler, bu belgedeki tanımlarında bu şekilde açıkça belirtilir.

"Make" değişkeni genişletmeye ve Bourne kabuğu jetona dönüştürme işlemine tabi olan özellikler, genellikle derleyicilere ve diğer araçlara rastgele seçenekler iletilmesi için kullanılır. Bu özelliklere örnek olarak cc_library.copts ve java_library.javacopts verilebilir. Bu ikame öğeler, tek bir dize değişkeninin yapılandırmaya özgü seçenek kelimeleri listesine genişletilmesine olanak tanır.

Etiket genişletme

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

genrule.cmd ve cc_binary.linkopts, örnek özellikler arasındadır. Ayrıntılar her durumda önemli göre değişiklik gösterebilir. Örneğin, göreli etiketlerin genişletilip genişletilmediği, birden fazla dosyaya genişleyen etiketlerin nasıl ele alındığı vb. ayrıntılar için kural özelliği dokümanlarına bakın.

Çoğu derleme kuralının tanımladığı tipik özellikler

Bu bölümde tüm derleme kurallarıyla tanımlanan özellikler olmasa da hepsi tanımlanır.

Özellik Açıklama
data

List of labels ; optional

Çalışma zamanında bu kuralın 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 hedefe çıkış yapan veya çalışma zamanında bağımlı olan tüm yürütülebilir dosyaların *.runfiles alanında görünmelidir. Buna, bu hedefin srcs yürütülürken kullanılan veri dosyaları veya ikili programlar dahil olabilir. Veri dosyalarına bağlı olma ve kullanma hakkında daha fazla bilgi için veri bağımlılıkları bölümüne bakın.

Çalışma zamanında başka girişleri kullanabilen girişleri işleyen yeni kurallar bir data özelliği tanımlamalıdır. Kuralların uygulama işlevleri ayrıca, herhangi bir data özelliğinin çıkışları ve Runfile'ları ile kaynak kodu veya çalışma zamanı bağımlıları sağlayan herhangi bir bağımlılık özelliğinden alınan filefile'ları da doldurmalıdır.

deps

List of labels ; optional

Bu hedef için bağımlılar. Genellikle yalnızca kural hedefleri listelenmelidir. (Bazı kurallar dosyaların doğrudan deps listesinde listelenmesine izin verse de, mümkün olduğunda bu durumdan kaçınılmalıdır.)

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

deps kullanılarak hedefin bir başkasına bağımlı olmasının ne anlama geldiğine dair tam anlamlar, kuralın türüne özeldir ve kurala özgü belgeler daha ayrıntılı olarak açıklanmıştır. Kaynak kodunu işleyen kurallar için deps genellikle srcs içinde 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ımlanmış olan sembolleri kullanmasına izin vermek için kullanılır. Diller arası bağımlılıklara birçok durumda da izin verilir: Örneğin, java_library hedefi, cc_library hedefinde C++ koduna bağımlı olarak deps hedefinde listelenir. Daha fazla bilgi için bağımlılıklar tanımını inceleyin.

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

srcs

List of labels ; optional

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

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

Özellik Açıklama
compatible_with

List of labels ; optional; nonconfigurable

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

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

deprecation

String; optional; nonconfigurable

Bu hedefle ilişkili açıklayıcı uyarı mesajı. Bu genellikle kullanıcılara bir hedefin geçerliliğini yitirdiğini veya başka bir kural tarafından geçersiz kılındığını, bir pakete özgü olduğunu veya bir nedenle zararlı olarak kabul edildiğini bildirmek için kullanılır. Mesajdan kaçınmak için hangi değişikliklerin gerekli olduğunu kolayca bulabilmek amacıyla bir referans (web sayfası, hata numarası veya örnek taşıma CL'leri gibi) eklemek iyi bir fikirdir. Eskisinin yerine düşüş olarak kullanılabilecek yeni bir hedef varsa, yalnızca eski hedefteki tüm kullanıcıları taşımak iyi bir fikirdir.

Bu özelliğin işlerin derleme şekli üzerinde hiçbir etkisi yoktur ancak bir derleme aracının teşhis çıktısını etkileyebilir. Derleme aracı, deprecation özelliği olan bir kurala başka bir paketteki hedef tarafından bağımlı olunduğunda bir uyarı gönderir.

Paket içi bağımlılıklar bu uyarıdan muaf tutulur. Örneğin, kullanımdan kaldırılan bir kuralın testlerinin oluşturulması bir uyarıyla karşılaşmaz.

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

Kullanıcılar 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 listesidir. Bu, Bazel'ın artık kullanmadığı, kullanımdan kaldırılmış bir lisanslama API'sinin parçasıdır. Bunu kullanmayın.

exec_compatible_with

List of labels ; optional; nonconfigurable

Bu hedef için yürütme platformunda bulunması gereken constraint_values listesi. Bu, kural türü tarafından önceden belirlenen 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üğünün açıklamasına bakın.

exec_properties

Dictionary of strings; optional

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üne bakın.

Hem platform hem de hedef seviye mülklerinde 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. 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, paket düzeyinde ["a", "b"] özellikleri etkinleştirilirse 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

List of labels ; optional; nonconfigurable

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

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

tags

List of strings; optional; nonconfigurable

Etiketler herhangi bir kuralda kullanılabilir. Testlerdeki 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ı alanda yürütülmesini kontrol etmek ve hem kullanıcılar hem de/veya harici araçlar tarafından ayrıştırmak için kullanılır.

Bazel, test veya genrule hedeflerinin 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 kelime, işlemin veya testin hiçbir zaman korumalı alanda olmamasına neden olur. Önbelleğe alınmaya veya uzaktan çalıştırılmaya devam edebilir. Bunlardan birini veya ikisini birden önlemek için no-cache ya da no-remote kullanın.
  • no-cache anahtar kelime, işlemle veya testle hiçbir zaman önbelleğe alınmaz (uzaktan veya yerel olarak)
  • no-remote-cache anahtar kelime, işlemin veya testin hiçbir zaman uzaktan önbelleğe alınmamasına neden olur (ancak yerel olarak önbelleğe alınabilir; ayrıca uzaktan yürütülebilir). Not: Bu etiketin amaçları doğrultusunda disk önbelleği yerel bir önbellek, http ve gTB önbellekleri ise uzak olarak kabul edilir. Yerel disk önbelleği ile uzak önbelleğin birleşimi kullanılırsa (birleştirilmiş önbellek) uzak önbellek olarak kabul edilir ve --incompatible_remote_results_ignore_disk ayarlanmadığı sürece yerel bileşenler kullanı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 veya 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 yumurtanın uzaktan önbelleğe alınmasının 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 veya korumalı alanda çalıştırılmasını engeller. Genel kurallar 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 etiket yalnızca korumalı alan etkinse etkinleştirilir.
  • block-network anahtar kelime, korumalı alanın içinden harici ağa erişimi engeller. Bu durumda yalnızca localhost ile iletişim kurulmasına izin verilir. Bu etiket yalnızca korumalı alan etkinse etkinleştirilir.
  • 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ğine göre önceliklidir.

Testlerdeki etiketler genellikle bir hata ayıklama ve yayın sürecindeki test rolüne açıklama eklemek için kullanılır. Etiketler genellikle, çalışma zamanı ek açıklama kapasitesi olmayan C++ ve Python testleri için kullanışlıdır. Etiket ve boyut öğelerinin kullanımı, kod tabanı check-in 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 "hariç tutma" modunda çalıştırmaya zorlar ve böylece aynı anda başka test çalıştırılmaz. Bu tür testler, tüm derleme etkinlikleri ve münhasır olmayan testler tamamlandıktan sonra seri modda yürütülür. Bazel, uzaktaki bir makinede çalıştırılan işlemler üzerinde kontrol sahibi olmadığından bu tür testler için uzaktan yürütme devre dışı bırakılır.
  • exclusive-if-local, testi yerel olarak yürütülürken "hariç tutma" modunda çalıştırmaya zorlar ancak uzaktan yürütülürse testi paralel olarak çalıştırır.
  • manual anahtar kelime, hedefte joker karakter (..., :*, :all vb.) ve test_suite kurallarının genişletilmesini engelleyecektir. Bu kurallar build, test ve coverage komutları için derlenecek/yürütülecek üst düzey hedefler hesaplanırken testi açıkça listelemez. query komutu da dahil olmak üzere diğer bağlamlarda hedef joker karakter veya test paketi genişletmesini etkilemez. manual hedefinin sürekli derleme/test sistemleri tarafından otomatik olarak oluşturulmaması/çalıştırılmaması gerektiğini ima etmeyin. Örneğin, belirli Bazel flag'lerini gerekli kılan ancak yine de düzgün şekilde yapılandırılmış ön gönderim veya sürekli test çalıştırmalarına dahil ettiği için bir hedefi bazel test ... öğesinden hariç tutmak isteyebilirsiniz.
  • external anahtar kelime, testi koşulsuz olarak yürütmeye zorlar (--cache_test_results değerinden bağımsız olarak).
Test hedeflerine eklenen etiketler hakkında daha fazla kural için Test Ansiklopedisi'ndeki Etiket Kuralları'na bakın.
target_compatible_with

List of labels ; optional

Bu hedefin uyumlu sayılması için hedef platformda bulunması 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 hedefin uyumsuz olduğu kabul edilir. Hedef kalıbı genişletildiğinde (ör. //..., :all) uyumsuz hedefler, oluşturma ve test işlemi için atlanır. Uyumsuz hedefler komut satırında açıkça belirtildiğinde, Bazel'ın bir hatayı yazdırmasına ve yapı veya test başarısızlığına neden olur.

Geçiş sürecinde uyumsuz hedeflere bağımlı olan hedefler uyumsuz olarak kabul edilir. Ayrıca geliştirme ve test için atlanırlar.

Boş liste (varsayılan) 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, bir cc_toolchain için target_compatible_with belirtmek yararlı olmaz.

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 amaçlı hedefler (ör. testler) bu hedefe bağlı olabilir.

Diğer bir deyişle, testonly olmayan bir kuralın testonly kuralına bağlı olmasına izin verilmez.

Testler (*_test kural) ve test paketleri (test_ Suite kuralları) varsayılan olarak testonly değerine sahiptir.

Bu özelliğin amacı, üretimde yayınlanan ikili dosyalarda hedefin kullanılmaması gerektiğidir.

Yalnızca test zamanı, derleme zamanında değil, çalışma sırasında uygulandığından ve bağımlılık ağacı üzerinden sanal olarak yayıldığından, mantıksal olarak uygulanmalıdır. Örneğin, birim testleri için faydalı olan saplamalar ve sahteler, üretime yayınlanacak olan ikili programları içeren entegrasyon testleri için de faydalı olabilir ve bu nedenle muhtemelen yalnızca test amaçlı olarak işaretlenmemelidir. Diğer taraftan, bağlantı vermenin tehlikeli olduğu kuralların, normalde herhangi bir davranışı normal olarak geçersiz kılacakları için, yalnızca test amaçlı olarak işaretlenmesi gerekir.

toolchains

List of labels ; optional; nonconfigurable

Bu değişkenin bu hedefe erişmesine izin verilen hedef kümesi. Bu hedefler, TemplateVariableInfo sağlayan kurallar veya Bazel'da 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ğımlı yapılandırma için kural uygulamaları tarafından kullanılan araç zinciri çözümü kavramından farklı olduğunu unutmayın. Bir hedefin hangi cc_toolchain veya java_toolchain özelliğini 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

Hedefteki visibility özelliği, hedefin diğer paketlerde kullanılıp kullanılamayacağını kontrol eder. Görünürlük dokümanlarına 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

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

Bazel'in bazel test ile yürüttüğünde 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 geçirilir.

env

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

Test bazel test tarafından çalıştırıldığında 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 bir TestEnvironment Sağlayıcısını doldurmak için kullanabilirsiniz.

env_inherit

List of strings; optional

Test bazel test tarafından çalıştırıldığında 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ı" belirtir: Çalışması için gereken süre/kaynak sayısı.

Birim testleri "küçük", entegrasyon testleri "aracı" ve uçtan uca testler ise "büyük" veya "büyük" olarak değerlendirilir. Bazel, varsayılan bir zaman aşımı süresi belirlemek için bu boyutu kullanır. Bu varsayılan değer, timeout özelliği kullanılarak geçersiz kılınabilir. Zaman aşımı her bir test için değil, DERLE hedefindeki tüm testler içindir. Test yerel olarak çalıştırıldığında, size planlama için de kullanılır: Bazel, --local_{ram,cpu}_resources motoruna uymaya çalışır ve aynı anda birçok yoğun test gerçekleştirerek yerel makineyi bunaltmaz.

Test boyutları, aşağıdaki varsayılan zaman aşımlarına ve 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 Tayland bahtı 1 kısa (1 dakika)
medium 100 1 orta (5 dakika)
large 300 1 uzun (15 dakika)
muazzam 800 1 kalıcı (60 dakika)

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

timeout

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

Geri dönmeden önce testin çalıştırılacağı süre.

Bir testin boyut özelliği kaynak tahminini kontrol etse de bir testin zaman aşımı bağımsız olarak ayarlanabilir. Açıkça belirtilmezse 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ş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ıdaki zamanların dışında test zaman aşımı, --test_timeout taban işaretiyle geçersiz kılınabilir (ör. yavaş olduğu bilinen koşullar altında manuel olarak çalışmak için). --test_timeout değerleri saniye cinsindendir. Örneğin, --test_timeout=120 test zaman aşımını iki dakika olarak ayarlar.

TEST_TIMEOUT ortam değişkeni, test oluşturulurken test zaman aşımı (saniye olarak) olarak ayarlanacak.

flaky

Boolean; optional; default False; nonconfigurable

Testi güvenilir olmayan olarak işaretler.

Ayarlanırsa testi en fazla üç kez yürütür ve yalnızca her seferinde başarısız olduğu takdirde başarısız olarak işaretler. Bu özellik varsayılan olarak False (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 ilgili testlerin güvenilir bir şekilde iletilmesi gerekir.

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, testi çalıştıracağınız paralel parçaların sayısını belirlemek için kullanılan buluşsal yöntemleri geçersiz kılar. Bazı test kurallarında parçanın ilk etapta parçalanmasını etkinleştirmek için bu parametre gerekebilir. Ayrıca bkz. --test_sharding_strategy.

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

Parçalama, test çalıştırıcının test parçalama protokolünü desteklemesini gerektirir. Aksi takdirde, muhtemelen tüm testleri her kırıkta çalıştırırsınız. Bu, istediğiniz bir test değildir.

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

local

Boolean; default False; nonconfigurable

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

Bu değerin True (Doğru) değerine ayarlanması, etiket olarak "local" (yerel) değerinin sağlanmasıyla eşdeğerdir (tags=["local"]).

Tüm ikili program kurallarında ortak olan ö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

Bazel'in run komutu tarafından veya bir test olarak çalıştırıldığında 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: Bazel dışında hedef çalıştırdığınızda (örneğin, ikili programı bazel-bin/ işlevinde 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. Bu, Starlark tarafından tanımlanan yürütülebilir kurallar için geçerli değildir.

NOT: Bazel dışında hedef çalıştırdığınızda (örneğin, bazel-bin/ ikili programını 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 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 aktarılan flag'lere veya hedefi hedefleyen aşağı akış bağımlılığına göre değişiklik gösterebilir. Örneğin, bunu birden çok platform veya derleme modu için hedefi ö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 değiştirildiğinde ise 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, yapılandırılabilir bir özellik için hedef yapılandırmasının hangi config_setting veya constraint_value kriterlerini karşıladığına bağlı olarak farklı alternatif değerler arasından seçim yapar.

Bazel, makroları işlemeden 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 herhangi bir işlem, select() tarafından hangi dalın seçildiğini bilmez. Örneğin makrolar, seçili dallara göre davranışlarını değiştiremez. Ayrıca bazel query yalnızca hedefin yapılandırılabilir bağımlılıkları hakkında konservatif tahminlerde bulunabilir. Kurallar ve makrolarla select() kullanma hakkında daha fazla bilgi için bu SSS bölümüne bakın.

Dokümanlarda nonconfigurable olarak işaretlenen özellikler bu özelliği kullanamaz. Bazel'ın, select() sorununu nasıl çözebileceğine karar verebilmesi için dahili olarak değerini bilmesi gerektiğinden genellikle özellik yapılandırılamaz.

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

Örtük çıkış hedefleri

C++ içindeki dolaylı çıkışlar kullanımdan kaldırılmıştır. Lütfen mümkünse başka dillerde kullanmaktan kaçının. Henüz kullanımdan kaldırma yöntemimiz olmasa da yakında kullanımdan kaldırılacaktır.

DERLE dosyasında derleme kuralı tanımlarken paketteki yeni, adlandırılmış kural hedefini açıkça beyan edersiniz. Birçok derleme kuralı işlevi, içeriği ve anlamı kurala özel olan bir veya daha fazla çıkış dosyası hedefi de dolaylı olarak içerir. Örneğin, bir java_binary(name='foo', ...) kuralını açıkça belirttiğinizde, çıkış dosyasının hedefini foo_deploy.jar paketinin bir üyesi olarak dolaylı olarak beyan edersiniz. (Bu hedef, dağıtıma uygun bağımsız bir Java arşividir.)

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

Her bir oluşturma kuralı türü için kuralın dokümanlarında, bu tür bir kuralın beyanının bulunduğu dolaylı çıkışların adlarını ve içeriğini ayrıntılı olarak açıklayan özel bir bölüm bulunur.

Derleme sistemi tarafından kullanılan iki ad alanı arasında önemli bir fark olsa da biraz farklıdır: etiketler, hedefleri tanımlar. Bu hedefler, kurallar veya dosyalar olabilir ve dosya hedefleri, kaynak (veya giriş) dosya hedeflerine ve türetilen (veya çıkış) dosya hedeflerine bölünebilir. Bunlar, DERLE dosyalarına yazabilir, komut satırından oluşturabilir veya bazel query öğesini kullanarak bunları inceleyebilirsiniz. Bu, hedef ad alanıdır. Her dosya hedefi, diskteki gerçek bir dosyaya ("dosya sistemi ad alanı") karşılık gelir; her kural hedefi diskteki sıfır, bir veya daha fazla gerçek dosyaya karşılık gelebilir. Diskte karşılık gelen bir hedefi olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında oluşturulan .o nesne dosyalarına BUILD dosyalarından veya komut satırından başvuruda bulunulamaz. Bu şekilde derleme aracı, işlevini yerine getirme şekliyle ilgili belirli uygulama ayrıntılarını gizleyebilir. Bu konu, DERLEME Kavramı Referansı bölümünde daha kapsamlı bir şekilde açıklanmıştır.