Yaygın tanımlar

Sorun bildir Kaynağı göster Nightly · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bu bölümde, proje yönetiminde yaygın olarak kullanılan pek çok işlevi vardır.

İçindekiler

Bourne kabuk belirteçleme

Bazı kuralların belirli dize özellikleri birden çok kurala bölünür kelimeleri ile birlikte, aşağıdaki kodu da Bourne kabuğunun tokenizasyon kurallarına Tırnak işareti içinde olmayan boşluklar ayrı kelimeleri sınırlar ve tek ve önlemek için çift tırnak karakterleri ve ters eğik çizgiler kullanılır. belirtiliyor.

Bu jeton oluşturmaya tabi olan özellikler, bu dokümanda tanımları

"Make" değişkeni genişletmeye ve Bourne kabuğu dilimlemeye tabi olan özellikler genellikle derleyicilere ve diğer araçlara keyfi seçenekler iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts ve java_library.javacopts. Bu ikameler birlikte bir yapılandırmaya özel bir listeye genişletilecek tek dizeli değişken içeren bir ifadedir.

Etiket genişletme

Çok az sayıda kuralın bazı dize özellikleri etiketlenebilir genişletme: Bu dizeler //mypkg:target gibi bir alt dizedir ve bu etiket bir olarak bildirilen ön koşulu olarak, temsil edilen dosyanın yol adı hedef //mypkg:target

Örnek özellikler arasında genrule.cmd ve cc_binary.linkopts. Ayrıntılar proje zaman çizelgesinde ve göreceli etiketlerin uygun olup olmadığı genişletildi; birden fazla dosyaya genişleyen etiketlerin nasıl vb. gibi davranır. Kural özellikleriyle ilgili dokümanların özellikler.

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

Bu bölümde, birçok derleme kuralı tarafından tanımlanan özellikler ama hepsini değil.

Özellik Açıklama
data

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

Bu kuralın çalışma zamanında ihtiyaç duyduğu dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verir.

data özelliğindeki hedeflerin varsayılan çıkışları ve çalıştırma dosyaları olan yürütülebilir dosyanın *.runfiles alanında görünmelidir. veya bu hedefe çalışma zamanı bağımlılığı vardır. Bu veriler arasında veri bulunabilir dosyaların veya ikili programların srcs yürütüldü. Veri dosyalarına bağımlı olma ve bu dosyaları kullanma hakkında daha fazla bilgi için veri bağımlılıkları bölümüne bakın.

Yeni kurallar işlenirse bir data özelliği tanımlamalıdır kullanabilen bir kontrol listesi oluşturun. Kurallar uygulama işlevleri hedefin Runfiles'i herhangi bir data özelliğinin çıkışlarından ve çalıştırma dosyalarından, yanı sıra ve çalışma zamanı bağımlılıklarını belirlemenize yardımcı olur.

deps

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

Bu hedefin bağımlılıkları. Genellikle yalnızca kural hedefleri listelenir. ( bazı kurallar, dosyaların doğrudan deps içinde listelenmesine izin verir. Bu kaçınılmalıdır.)

Dile özgü kurallar, listelenen hedefleri genellikle belirli sağlayıcılar.

Bir hedefin başka bir araca bağımlı olmasının tam anlamı deps, kural türüne ve kurala özgüdür daha ayrıntılı değineceğiz. Kaynak kodu işleyen kurallarda deps genellikle srcs

Çoğunlukla bir modülün kullanılmasına izin vermek için deps bağımlılığı kullanılır. aynı programlama dilinde yazılmış başka bir modülde tanımlanan sembolleri ve olarak derlenir. Diller arası bağımlılıklara birçok farklı dilde durumlar: Örneğin, bir java_library hedefi C++ koduna bağlı olabilir. cc_library hedefinde, ikincisini deps özelliği. Şu kelimenin tanımını göster: bağımlılıklar konulu videomuzu izleyin.

licenses

Dize listesi; nonconfig; 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. Şunları Yapmayın: bunu kullan.

srcs

Etiket listesi; varsayılan değer []

Bu kural tarafından işlenen veya eklenen dosyalar. Genellikle dosyaları doğrudan listeler, ancak kural hedeflerini (ör. filegroup veya genrule) listeleyen dahil etmeli.

Dile özgü kurallar, genellikle listelenen dosyaların belirli bir dosya uzantıları olduğunu unutmayın.

Tüm derleme kurallarında ortak özellikler

Bu bölümde, dolaylı olarak tüm derlemelere eklenen özellikler kurallar.

Özellik Açıklama
compatible_with

Etiket listesi; nonyapılandırabilir; varsayılan değer []

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

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

deprecation

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

Bu hedefle ilişkili açıklayıcı bir uyarı mesajı. Bu genellikle bir hedefin eskidiğini kullanıcılara bildirmek için kullanılır. veya başka bir kuralın yerini aldıysa, bir pakete özelse veya herhangi bir nedenle zararlı olarak değerlendirilebilir. Mesajın gösterilmesini önlemek için hangi değişikliklerin yapılması gerektiğini kolayca anlayabilmeleri amacıyla bir referans (ör. web sayfası, hata numarası veya örnek taşıma CL'leri) eklemek iyi bir fikirdir. Bunun yerine kullanabileceğiniz 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 derleme aracının teşhis çıktısını etkileyebilir. Derleme aracı, deprecation özelliğine sahip bir kural olduğunda bir hedefe dayandığını gösterir.

Paket içi bağımlılıklar bu uyarıdan muaftır. Bu nedenle, Örneğin, desteği sonlandırılmış bir kuralın testlerini oluşturmak bir uyarıyla karşılaşabilirsiniz.

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

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

distribs

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

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

exec_compatible_with

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

İş Listesi constraint_values bu hedef için yürütme platformunda mevcut olması gerekir. Bu ek kısıtlamalara tabi olursunuz. Kısıtlamalar kullanılıyor mevcut yürütme platformlarının listesini kısıtlayın. Daha fazla bilgi için bkz. açıklama: araç zinciri çözünürlüğünü kullanın.

exec_properties

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

Bu hedef için seçilen bir platformun exec_properties özelliğine eklenecek dize dizini. 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 değer []

Özellik, bir hedefte etkinleştirilebilen veya devre dışı bırakılabilen dize etiketidir. İlgili içeriği oluşturmak için kullanılan bir özelliğin anlamı kuralın kendisine bağlıdır.

Bu features özelliği, paket düzeyindeki features özelliği için geçerlidir. Örneğin, ["a", "b"] özellikleri paket düzeyinde etkinleştirilir ve bir hedefin features özelliği ["-a", "c"] değerlerini içerir. Bu özellikler kural "b" olur ve "c"yi seçin. Örneği inceleyin.

restricted_to

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

Şu konum yerine bu hedefin oluşturulabileceği ortamların listesi: ortamları için de görüntüleyebilirsiniz.

Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Görüntüleyin compatible_with inceleyebilirsiniz.

tags

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

Etiketler herhangi bir kuralda kullanılabilir. Testteki etiketler ve test_suite kuralları, testlerin sınıflandırılmasında yararlıdır. Test dışı hedeflerdeki etiketler, testlerin korumalı alana alınmış yürütülmesini kontrol etmek için genrule ve Yıldızlar gerçek kişiler ve/veya harici araçlar tarafından ayrıştırılması için yeniden kullanılmasına izin verir.

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

  • no-sandbox anahtar kelime sonucu işlemde veya testte hiçbir zaman yok korumalı alan; hâlâ önbelleğe alınabilir veya uzaktan çalıştırılabilir - no-cache kullanın veya no-remote seçeneğini kullanın.
  • no-cache anahtar kelime sonucu işlemde veya testte hiçbir zaman yok önbelleğe alınan (uzaktan veya yerel olarak)
  • no-remote-cache anahtar kelime sonucu işlemde veya testte hiçbir zaman yok uzaktan önbelleğe alınır (ancak yerel olarak önbelleğe alınmış olabilir; uzaktan da yürütülebilir). Not: Bu etiketin amaçları doğrultusunda, disk önbelleği yerel bir önbellek olarak kabul edilir, ancak disk önbelleği bir yerel önbellek olarak kabul edilir. http ve gRPC önbellekleri uzak kabul edilir. Yerel disk önbelleği ile uzak önbelleğin bir kombinasyonu kullanılıyorsa (birleşik önbellek), uzak bir önbellek olarak işlem görür ve --incompatible_remote_results_ignore_disk sürece tamamen devre dışı bırakılır ayarlanır ve 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 engelliyor veya uzaktan önbelleğe alınmış olması gerekir. Bu, hem no-remote-cache hem de no-remote-exec kullanmaya eşdeğerdir.
  • no-remote-cache-upload anahtar kelimesi, bir spawn'ın uzaktan önbelleğe alınmasının yükleme bölümünü devre dışı bırakır. uzaktan yürütmeyi devre dışı bırakmaz.
  • local anahtar kelime, işlemin veya testin uzaktan önbelleğe alınmasını engelliyorsa veya korumalı alan içinde çalıştırılabilir. Genrule ve testler için kuralı local = True ile işaretlemek özelliğinin değeri aynı etkiye sahiptir.
  • requires-network anahtar kelime, harici ağdan alır. Bu etiketin yalnızca korumalı alana alma durumunda bir etkisi vardır etkin olduğundan emin olun.
  • block-network anahtar kelimesi, korumalı alan içinden harici ağa erişimi engeller. Böyle bir durumda yalnızca iletişim yerel ana makinesiyle kullanılmasına izin verilir. Bu etiketin bir etkisi yalnızca korumalı alana almanın etkin.
  • requires-fakeroot, testi veya eylemi uid ve gid 0 (kök) olarak çalıştırır. kullanıcı) tarafından sağlanır. Bu özellik yalnızca Linux'ta desteklenir. Bu etiket, --sandbox_fake_username komut satırı seçeneği.

Testlerdeki etiketler genellikle bir testin hata ayıklama ve yayınlama sürecinizdeki rolünü açıklamak için kullanılır. Genellikle etiketler en çok C++ ve Python'da testlerine izin veriyoruz. Etiket ve boyut kullanımı öğeleri, kod tabanına dayalı olarak test paketlerinin derlenmesinde esneklik sağlar giriş politikası.

Bazel, Test kuralının tags özelliği:

  • exclusive, testi "özel" başka testlerin çalıştırılmadığından emin olun. anlamına gelir. Bu tür testler, tüm derleme etkinliği ve özel olmayan testler tamamlandıktan sonra seri olarak yürütülür. Uzaktan yürütme bu testler için devre dışı bırakılmıştır. Bunun nedeni, Bazel'in çalışırken gözle görülür.
  • exclusive-if-local, testi "özel" yerel olarak yürütülürse yürütülür, ancak uzaktan yürütülür.
  • manual anahtar kelime, hedefi, hedef desen joker karakterlerinin genişletilmesinden hariç tutacak (..., :*, :all vb.) ve test_suite kural oluşturmak/çalıştırmak üzere üst düzey hedefler kümesi hesaplanırken testi açık bir şekilde listelemeyen build, test ve coverage komutları için. İçermiyor: Aşağıdakiler dahil olmak üzere diğer bağlamlarda hedef joker karakteri veya test paketi genişletmesini etkiler: query komutudur. manual işlevinin, bir hedefin uygulanması gerektiği anlamına gelmediğini sürekli derleme/test sistemleri tarafından otomatik olarak geliştirilemez/çalıştırılamaz. Örneğin, belirli bir hedefin bazel test ... içinden hariç tutulması Bazel flag'leri ancak yine de düzgün yapılandırılmış ön gönderim veya sürekli teste dahil edilmesini sağlayın koşar.
  • external anahtar kelime, testi koşulsuz olarak zorunlu kılar yürütüldüğünden (--cache_test_results değeri) ekleyebilirsiniz.
Test hedeflerine eklenen etiketlerle ilgili daha fazla kural için Test Ansiklopedisi'ndeki Etiket Kuralları bölümünü inceleyin.
target_compatible_with

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

Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken constraint_value'lerin listesi. Bu, kural türü. Hedef platform listelenen tüm kısıtlamaları karşılamıyorsa hedef uyumsuz kabul edilir. Uyumsuz hedefler: hedef kalıp genişletildiğinde oluşturma ve test için atlandı (örn. //..., :all). komut satırının uyumlu olmaması, Bazel'in bir hata yazdırmasına ve hatasıyla karşılaşırsınız.

Geçişli olarak uyumsuz hedeflere bağlı olan hedefler Uyumsuz olarak kabul edilir. Ayrıca derleme ve test için atlanır.

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

Workspace Kuralları dışındaki tüm kurallar bunu destekler özelliğini gönderin. Bazı kurallarda bu özelliğin herhangi bir etkisi yoktur. Örneğin, Şunun için target_compatible_with: cc_toolchain yararlı değil.

Bkz. Platformlar sayfasına bakın.

testonly

Boole; nonconfig; varsayılan değer False test ve test paketi hedefleri hariç

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

Aynı şekilde testonly olmayan bir kuralın testonly olan herhangi bir kurala bağlıdır.

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

Bu özelliğin amacı, hedefin üretime yayınlanan ikili programlarda bulunur.

Çalışma zamanında değil, yalnızca test amaçlı olarak uygulanır ve üzerinden yaymak için, bu yöntemin mantıklı bir şekilde uygulanması gerekir. Örneğin, sahte ve sahtecilik amaçlı ve entegrasyon testleri için de yararlı olabilir. üretim kanalına yayınlanacak aynı ikili programları içeren ve bu nedenle büyük olasılıkla testonly olarak işaretlenmemelidir. Buna karşılık, normal davranışı koşulsuz olarak geçersiz kıldığı için bağlantı oluşturmak bile tehlikeli olan kurallar kesinlikle testonly olarak işaretlenmelidir.

toolchains

Etiket listesi; nonyapılandırabilir; varsayılan değer []

Bu hedefin Değişkenleri oluştur olduğu hedef kümesi erişebilir. Bu hedefler, dönüşüm hunisinin üst kısmındaki TemplateVariableInfo veya Bazel'de yerleşik olarak bulunan araç zinciri türleri için özel hedefler. Bunlardan bazıları:

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

Bunun proje yönetimi kavramından araç zinciri çözünürlüğü . Bunu kullanamazsınız belirli bir cc_toolchain veya java_toolchain özelliğinin belirleneceğini konuşacağız.

visibility

Etiket listesi; nonyapılandırabilir; varsayılan olarak şu değerden default_visibility: belirtilmişse paket veya "//visibility:private" aksi takdirde

Bir hedefteki visibility özelliği, hedefin diğer paketlerde kullanılabilir. Şuna ilişkin dokümanlara bakın: görünürlük.

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" yerine koyma işlemine ve Bourne kabuğu jetonuna tabidir; varsayılan değer []'dir.

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

Bu bağımsız değişkenler, herhangi bir --test_arg değerinden önce iletilir bazel test komut satırında belirtilir.

env

Dize sözlüğü; değerleri, $(location) ve "Değişken yap" ifadesi; varsayılan değer []

Test, bazel test

Bu özellik yalnızca cc_test gibi yerel kurallar için geçerlidir py_test ve sh_test. Şunlar için geçerli değildir: Starlark tarafından tanımlanmış test kuralları. Kendi Starlark kurallarınıza "env" özelliği ekleyebilir ve bu özelliği kullanarak bir TestEnvironment sağlayıcısını doldurabilirsiniz.

env_inherit

Dize listesi; varsayılan değer []

Şu kaynaktan devralınacak ek ortam değişkenlerini belirtir: test bazel test tarafından gerçekleştirildiğinde harici ortam.

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"; nonconfigured; 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" olarak kabul edilir veya anlamına gelir. Bazel, varsayılan zaman aşımını belirlemek için boyutu kullanır. Bu zaman aşımı süresi timeout özelliği için de kullanılmaktadır. Zaman aşımı, BUILD hedefindeki tüm testler için geçerlidir, her test için değil bağımsız teste tabi tutulması gerekir. Test yerel olarak çalıştırıldığında size, planlama amacıyla da kullanılır: Bazel, --local_{ram,cpu}_resources'e uymaya çalışır ve aynı anda çok sayıda ağır test çalıştırarak yerel makineyi aşırı yüklememeye çalışır.

Test boyutları, aşağıdaki varsayılan zaman aşımlarına ve varsayılan en yüksek yerel kaynak değerine karşılık gelir kullanımlar:

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

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

timeout

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

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 testin zaman aşımı bağımsız olarak ayarlanabilir. Belirtilmemişse zaman aşımı, testin boyutuna göre belirlenir. Test zaman aşımı, --test_timeout işaretiyle geçersiz kılınabilir (ör. yavaş olduğu bilinen belirli koşullarda çalıştırmak için). Zaman aşımı değerlerini test etme şu 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 bayrağı, ör. manuel olarak çalıştırmak için ve koşulların yavaş olduğu biliniyor. --test_timeout değerleri saniye cinsinden belirtiliyor. Örneğin, --test_timeout=120 testi ayarlar iki dakikaya patladı.

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

flaky

Boole; nonconfig; varsayılan değer False

Testi hatalı olarak işaretler.

Ayarlanırsa testi üç kereye kadar yürütür ve yalnızca şu koşulda başarısız olarak işaretler: her seferinde başarısızlığa uğrar. Bu özellik varsayılan olarak False (Yanlış) değerine ayarlanır ve test yalnızca bir kez uygulanır. Bu özelliğin kullanılması genellikle önerilmez. İddialar doğru olduğunda testler güvenilir bir şekilde geçmelidir.

shard_count

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

Paralel kırık sayısını belirtir kullanmanız gerekir.

Bu değer ayarlanırsa paralel parçalara ayırmalıdır. Bazı testlerde kurallarına göre, parçalamayı etkinleştirmek için bu parametre gerekebilir en başta sunun. --test_sharding_strategy sayfasını da inceleyin.

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

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 her kırıkta her testi çalıştırır. istemediğiniz bir şey değildir.

Görüntüleyin Parçalama Testi bölümüne göz atın.

local

Boole; nonconfig; varsayılan değer False

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

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

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

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

Özellik Açıklama
args

Dize listesi; tabi $(location) ve "Değişken yap" ifadesini değiştirme ve Bourne Shell tokenizasyonu; nonYapılandırılabilir; varsayılan değer []

Bazel'in run komutuyla veya test olarak yürütüldüğünde hedefe ileteceği komut satırı bağımsız değişkenleri. Bu bağımsız değişkenler bazel run veya bazel test komut satırı.

NOT: Hedef çalıştırıldığında bağımsız değişkenler iletilemez başka bir komut dosyası kullanıyorsanız (örneğin, ikili dosyayı bazel-bin/).

env

Dize sözlüğü; değerleri, $(location) ve "Değişken yap" ifadesi; varsayılan değer {}

Hedef aşağıdaki durumlarda ayarlanacak ek ortam değişkenlerini belirtir: bazel run tarafından yürütüldü.

Bu özellik yalnızca cc_binary, py_binary ve ve sh_binary. Starlark tarafından tanımlanan yürütülebilir kurallar için geçerli değildir.

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

output_licenses

Dize listesi; varsayılan değer []

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. Şunları Yapmayın: bunu kullan.

Yapılandırılabilir özellikler

Çoğu özellik "yapılandırılabilir" olduğundan değerleri hedef farklı şekillerde oluşturulur. Özel olarak, yapılandırılabilir özellikler Bazel komut satırına iletilen işaretlere veya aşağı akış bağımlılığının hedefi istiyor. Bu, örneğin, hedefi birden fazla platform veya derleme modu için özelleştirmek amacıyla kullanılabilir.

Aşağıdaki örnekte, farklı hedefler için farklı kaynaklar açıklanmaktadır. inceleyebilirsiniz. bazel build :multiplatform_lib --cpu x86 çalıştırılıyor hedefi x86_impl.cc ile oluşturur. --cpu arm, bunun yerine 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 temel alınan yapılandırılabilir bir özellik için farklı alternatif değerler arasından seçim yapar. config_setting olan veya constraint_value hedef yapılandırmasının karşıladığı ölçütümüz olur.

Bazel, yapılandırılabilir özellikleri makroları işlendikten sonra ve (teknik olarak yükleme ve analiz aşamaları) görüntüleyin. select() değerlendirmesinden önce yapılan işlemler, hangi işlemin gerçekleştirildiğini bilmez select() öğesinin seçer. Örneğin, makrolar davranışlarını seçilen dala göre değiştiremez ve bazel query yalnızca bir hedefin yapılandırılabilir bağımlılıkları hakkında ihtiyatlı tahminler yürütebilir. Görüntüleyin bu SSS select() öğesini kurallar ve makrolarla kullanma hakkında daha fazla bilgi edinin.

Dokümanlarında nonconfigurable işaretli özellikler bu özelliği kullanamaz. Genellikle bir özellik yapılandırılamaz çünkü Bazel bir sorunun nasıl çözüleceğine karar vermeden önce select()

Bkz. Yapılandırılabilir Derleme Özellikleri'ne göz atın.

Dolaylı çıkış hedefleri

C++'taki örtük çıkışlara verilen destek sonlandırıldı. Lütfen kullanmayın diğer dillerde de yapabilirsiniz. Henüz desteği sonlandırılacak bir yolumuz yok ancak bu sürümler de zaman içinde desteği sonlandırılacak.

Bir BUILD dosyasında derleme kuralı tanımladığınızda, pakette açıkça yeni, adlandırılmış bir kural hedefi beyan etmiş olursunuz. Birçok derleme kuralı işlevleri dolaylı olarak bir veya daha fazla çıkış dosyası gerektirir bir kurala özgüdür. Örneğin, açıkça bir java_binary(name='foo', ...) kural, siz de çıkış dosyasını dolaylı olarak tanımlama foo_deploy.jar adresini aynı paketin üyesi olarak hedefleyin. (Bu hedef, bağımsız bir Java arşividir. .)

Dolaylı çıkış hedefleri, Google AdWords'ün hedef grafiğidir. Tıpkı diğer hedefler gibi, isteğe bağlı olarak oluşturulurlar. üst düzey derleme komutta belirtildiğinde veya diğer derleme hedefleri için gerekli önkoşullardır. Bilgilerin BUILD dosyalarında bağımlılık olarak referans verilir ve bazel query gibi analiz araçlarının çıktısı.

Her derleme kuralı türü için kuralın dokümanlarında bir ilgili gizli dokümanların adını ve içeriğini söz konusu kuralın bildirilmesine yol açan çıkışları içerebilir.

Derleme sistemi tarafından kullanılan iki adlandırma alanı arasında önemli ancak biraz ince bir fark vardır: Etiketler, kural veya dosya olabilecek hedefleri tanımlar. Dosya hedefleri ise kaynak (veya giriş) dosya hedefleri ve türetilmiş (veya çıkış) dosya hedefleri olarak ikiye ayrılabilir. BUILD dosyalarında söyleyebileceğiniz şeyler şunlardır: komut satırından derlemek veya bazel query kullanarak incelemek; bu, hedef ad alanıdır. Her dosya hedefi karşılık gelir ("dosya sistemi ad alanı") içine alır; her kural hedefi, diskteki sıfır, bir veya daha fazla gerçek dosyaya karşılık gelebilir. Diskte, karşılık gelen hedefi olmayan dosyalar olabilir; şunun için: örnek, C++ derlemesi sırasında üretilen .o nesne dosyaları öğesine BUILD dosyaları içinden veya komut satırından başvuruda bulunulamaz. Bu şekilde derleme aracı, bir fikir edinmiş oldunuz. Bu konu, BUILD Concept Reference (Konsept Referansı Derleme) başlıklı makaleyi inceleyin.