Yaygın tanımlar

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ünmüştü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 tokenizasyona tabi olan özellikler, bu belgedeki tanımlarında bu şekilde açıkça belirtilmedi.

"Marka" işlemine tabi özellikler değişken genişletme ve Bourne kabuğu belirtkeleme genellikle rastgele seçeneklerin derleyiciler ve diğer araçlar. Bu tür özelliklere örnek olarak şunlar verilebilir: 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

List of labels ; optional

Çalışma zamanında bu kural için gereken dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genel olarak herhangi bir hedefe 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ü. Bkz. 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

List of labels ; optional

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

List of strings; optional; nonconfigurable

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

List of labels ; optional

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

List of labels ; optional; nonconfigurable

Bu hedefin oluşturulabileceği ortamların listesi ve ortamları için de görüntüleyebilirsiniz.

Bu, Bazel'in kısıtlama sisteminin bir parçasıdır. Kullanıcılar, birbirine bağımlı olabilir ve olamaz. Ö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

String; optional; nonconfigurable

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. Belgenize (bir web sayfası, hata numarası veya örnek taşıma CL'leri gibi) Böylece iletiden kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca anlayabilir. 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.

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

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

distribs

List of strings; optional; nonconfigurable

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

exec_compatible_with

List of labels ; optional; nonconfigurable

İş 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

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ünü inceleyin.

Bir anahtar hem platform hem de hedef düzeyindeki mülklerde mevcutsa 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. İ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

List of labels ; optional; nonconfigurable

Ş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

List of strings; optional; nonconfigurable

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, aşağıdakileri tespit ederse korumalı alan kodunun davranışını değiştirir anahtar kelimeler (herhangi bir testin tags veya genrule) veya herhangi bir Starlark için execution_requirements tuşlarının eyleme dökülebilir.

  • 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. Birleşik bir önbellek (ör. yerel ve uzak bileşenlere sahip bir önbellek) belirtilirse 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 kelime sonucu işlemde veya testte hiçbir zaman yok çalıştırılabilir (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, eş zamanlı olarak her iki no-remote-cache ve no-remote-exec.
  • no-remote-cache-upload anahtar kelimesi, bir yumurtanın uzaktan önbelleğe alma işleminin bir kısmını yüklemenin bir kısmını devre dışı bırakır. uzaktan yürütmeyi devre dışı bırakmaz.
  • local anahtar 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 kelime harici ağdan alır. 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 hata ayıklama ve yayınlama sürecini takip etmenize yardımcı olur. 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 derlemelerden sonra seri şekilde yürütülür ve münhasır olmayan testlerin tamamlandığına dikkat edin. 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.
ziyaret edin. Görüntüleyin Etiket Kuralları bakın.
target_compatible_with

List of labels ; optional

İş Listesi constraint_value sn. bu hedefin dikkate alınması için hedef platformda bulunması gerekir uyumlu. 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, oluşturma ve test için atlanırlar.

Boş liste (varsayılan değerdir), hedefin uyumlu olduğunu gösterir uyumlu bir şekilde çalışır.

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

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

Doğru değerine ayarlanırsa 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. Öte yandan, bağlantı kurmak bile tehlikelidir, belki de koşulsuz olarak normal davranışı geçersiz kılar, kesinlikle test amaçlı olarak işaretlenmelidir.

toolchains

List of labels ; optional; nonconfigurable

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. Bu şunlardır:

  • @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

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ı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

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

Ayarlandığında Bazel'in hedefe aktardığı komut satırı bağımsız değişkenleri bazel test ile yürütüldü.

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

env

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

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ız için bir "env" bir değer doldurmak için TestEnvironment Sağlayıcı.

env_inherit

List of strings; optional

Ş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 ve sh_test. Starlark'ın tanımladığı 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" 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, ek olarak aşağıdakiler için de kullanılır: zaman çizelgesine sadık kalmalarını sağlar: Bazel,--local_{ram,cpu}_resources ağır testler yaparak yerel makineyi yorar.

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_SIZE ortam değişkeni değerini döndürü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ü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. 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. şunun için: belirli koşullar altında çalışmasıdır. 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

Boolean; optional; default False; nonconfigurable

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ının genellikle önerilmediğini unutmayın: onayları onaylandığında testlerin güvenilir bir şekilde başarılı olması gerekir.

shard_count

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

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

Bu değer, 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. Ayrıca bkz. --test_sharding_strategy.

Test parçalama etkinleştirilirse, testi oluştururken ortam değişkeni TEST_TOTAL_SHARDS bu değere ayarlanır.

Parçalama, test çalıştırıcının test parçalama protokolünü desteklemesini gerektirir. Aksi takdirde, büyük olasılıkla her parçada 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

Boolean; default False; nonconfigurable

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

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

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

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

Özellik Açıklama
args

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

Yürütüldüğünde Bazel'in hedefe ileteceği komut satırı bağımsız değişkenleri run komutuyla veya test olarak kullanabilirsiniz. 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

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

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 çalıştırdığınızda ortam değişkenleri ayarlanmaz başka bir komut dosyası kullanıyorsanız (örneğin, ikili dosyayı bazel-bin/).

output_licenses

List of strings; optional

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, kullanarak hedefi birden fazla platform veya derleme modu için özelleştirebilirsiniz.

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 değiştirilemez seçilen dala göre davranışlarını görebilir ve bazel query, Hedefin yapılandırılabilir bağımlılıkları hakkında yalnızca konservatif tahminlerde bulunun. Görüntüleyin bu SSS select() öğesini kurallar ve makrolarla kullanma hakkında daha fazla bilgi edinin.

Dokümanlarında nonconfigurable olarak işaretlenen özellikler bu özelliği kullanabilirsiniz. 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ülü çıkışlar kullanımdan kaldırılmıştır. Lütfen kullanmayın diğer dillerde de ekleyebilirsiniz. Henüz desteğimizi sonlandırmaya yönelik bir yolumuz yok ancak zaman içinde bu sistemlerin de desteği sonlandırılacaktır.

BUILD dosyasında bir derleme kuralı tanımladığınızda bir pakette yeni ve adlandırılmış kural hedefi tanımlayarak. 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.

Google Ads Temel Düzey derleme sistemi tarafından kullanılan iki ad alanı bulunur: etiketler hedefleri, Bunlar, kurallar veya dosyalar olabilir ve dosya hedefleri, kaynak (veya giriş) dosya hedefleri ve türetilen (veya çıkış) dosya belirler. 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.