İçindekiler
paket
package(default_deprecation, default_testonly, default_visibility, features)
Bu işlev, paketinden yararlanın. Paket (BUILD dosyası) içinde en fazla bir kez kullanılır.
package() işlevi, dosyası olmalı.
Bağımsız değişkenler
Özellik | Açıklama |
---|---|
default_visibility |
Bu paketteki kuralların varsayılan görünürlüğü. Bu paketteki her kural, bu
özelliği ( |
default_deprecation |
Varsayılan değerini ayarlar
Bu paketteki tüm kurallar için |
default_testonly |
Varsayılan değerini ayarlar
|
features |
Bu BUILD dosyasının anlamını etkileyen çeşitli işaretler belirler. Bu özellik genellikle derleme sistemi üzerinde çalışan kişiler tarafından etiket paketlerinin olması gerekir. Şu durum söz konusu değilse bunu kullanmayın: ve derleme sistemi üzerinde çalışan biri tarafından açık bir şekilde istekte bulunulabilir. |
Örnekler
Aşağıdaki beyan, bu paketteki kuralların yalnızca paketin üyeleri görebilir//foo:target
grubu. Bağımsız görünürlük bildirimleri
bir kuralda varsa bu spesifikasyonu geçersiz kılar.
package(default_visibility = ["//foo:target"])
package_group
package_group(name, packages, includes)
Bu işlev bir paket grubunu tanımlar
ve bir etiketi kümeyle ilişkilendirir. Etikete şuradan referans verilebilir:
visibility
özellikleri.
Paket grupları, öncelikli olarak görünürlük kontrolü için kullanılır. Herkes tarafından görülebilen bir hedefine kaynak ağaçtaki her paketten referans verilebilir. Özel olarak Görünür hedefe yalnızca kendi paketi içinde referans verilebilir (alt paketlerde değil). Bu uç noktalar arasında bir hedef, kendi paketine ve bir veya daha fazla paket grubu tarafından açıklanan paketlerin sayısı. Daha ayrıntılı hakkında ayrıntılı bilgi için görünürlük özelliğini gönderin.
Belirli bir paket,
packages
özelliği ya da diğer özelliklerden birinde zaten mevcut
includes
özelliğinde bahsedilen paket grupları.
Paket grupları teknik olarak hedeflerdir ancak kurallar tarafından oluşturulmaz ve veya görünürlük korumasına sahip değiller.
Bağımsız değişkenler
Özellik | Açıklama |
---|---|
name |
Bu hedef için benzersiz bir ad. |
packages |
Sıfır veya daha fazla paket spesifikasyonu içeren bir liste. Her paket spesifikasyonu dizesinde aşağıdakilerden biri olabilir formlar:
Ayrıca, ilk iki paket spesifikasyonu türü ayrıca
dikkate alınmadığını belirtmek için Paket grubu,
hiçbir olumsuz özelliği değil, olumlu özellikleri var
Örneğin, Herkese açık görünürlük dışında, bilgileri doğrudan paylaşmanın bir yolu paketlerini yeniden sınıflandırır. Bu özellik eksikse,
Bu, aynı zamanda listeyi içeren bir listeye ayarlamakla aynı şekilde,
yalnızca Not: Bazel 6.0'dan önceki sürümlerde Not: Bazel 6.0'dan önce, bu özellik şu şekilde serileştirildiğinde:
|
includes |
Buna dahil olan diğer paket grupları. Bu özellikteki etiketler diğer paket gruplarına başvuruda bulunmalıdır.
Referans verilen paket gruplarındaki paketler, bunun bir parçası olarak alınır
paket grubu. Geçişli bir yöntemdir (paket grubu
Reddedilmiş paket özellikleriyle birlikte kullanıldığında her grubun paket kümesi önce bağımsız olarak hesaplanır ve ve sonuçlar birleştirilir. Bu, ters çevrilmiş özellikleri üzerinde hiçbir etkisi yoktur. olabilir. |
Örnekler
Aşağıdaki package_group
bildirimi bir
"tropik" adlı paket grubu bir bitki türü seçin.
package_group( name = "tropical", packages = [ "//fruits/mango", "//fruits/orange", "//fruits/papaya/...", ], )
Aşağıdaki beyanlar kurgusal bir öğenin paket gruplarını belirtir uygulama:
package_group( name = "fooapp", includes = [ ":controller", ":model", ":view", ], ) package_group( name = "model", packages = ["//fooapp/database"], ) package_group( name = "view", packages = [ "//fooapp/swingui", "//fooapp/webui", ], ) package_group( name = "controller", packages = ["//fooapp/algorithm"], )
exports_files
exports_files([label, ...], visibility, licenses)
exports_files()
, şuna ait dosyaların listesini belirtir:
diğer paketlere aktarılan verileri içerir.
Bir paketin BUILD dosyası, yalnızca doğrudan ait olan kaynak dosyalarına başvurabilir
açıkça dışa aktarılırsa başka bir pakete
exports_files()
ifadesi. Daha fazla bilgi:
dosyaların görünürlüğü.
Eski bir davranış olarak, bir kurala giriş olarak belirtilen dosyalar da dışa aktarılır
bayrağa kadar varsayılan görünürlükte
--incompatible_no_implicit_file_export
olduğunu varsayalım. Ancak bu davranışa güvenilmemeli ve aktif bir şekilde
bazı yerler var.
Bağımsız değişkenler
Bağımsız değişken, geçerli paketteki dosya adlarının bir listesidir. CEVAP
görünürlük beyanı da belirtilebilir; Bu örnekte, dosyalar
belirtilen hedefler tarafından görülebilir. Görünürlük belirtilmezse dosyalar
görünür olacaktır. Paketin varsayılan görünürlüğü
package
içinde belirtilir
işlevini kullanın. Lisanslar
belirtilebilir.
Örnek
Aşağıdaki örnekte golden.txt
, a
test_data
paketindeki diğer metin dosyasını
paketler hâlinde kullanabilir (örneğin, data
özelliğinde)
olabilir.
# from //test_data/BUILD exports_files(["golden.txt"])
glob
glob(include, exclude=[], exclude_directories=1, allow_empty=True)
Glob, belirli yol kalıplarıyla eşleşen tüm dosyaları bularak ve yollarının yeni, değişebilir, sıralanmış bir listesini döndürür. Glob yalnızca dosyaları arar ve yalnızca kaynak dosyalara bakar (oluşturulan dosyaları ya da hedefler).
Dosyanın pakete bağlı olması durumunda kaynak dosyanın Etiketi sonuca dahil edilir
yolu, include
kalıplarından herhangi biriyle eşleşiyor ve
exclude
kalıp.
include
ve exclude
listeleri yol kalıpları içeriyor
. Her model bir ya da daha fazla
daha fazla yol segmenti Unix yollarında her zamanki gibi, bu segmentler
/
Segmentler *
joker karakterini içerebilir: Bu,
hariç, yol segmentindeki herhangi bir alt dize (boş alt dize dahil)
dizin ayırıcı /
. Bu joker karakter birden çok kez kullanılabilir
tek bir yol segmenti içinde. Ayrıca, **
joker karakteri
Sıfır veya daha fazla tam yol segmenti ancak bağımsız olarak tanımlanması gerekir
yol segmenti
foo/bar.txt
,foo/bar.txt
dosyasıyla tam olarak eşleşiyor bu pakettefoo/*.txt
,foo/
dizinindeki tüm dosyalarla eşleşir dosya.txt
(foo/
bir alt paket değilse)foo/a*.htm*
,foo/
içindeki tüm dosyalarla eşleşira
ile başlayan ve rastgele bir dizeye sahip olan bir dizindir ( boş olmalıdır), ardından.htm
değerini içerir ve başka bir rastgele dizeyle biter;foo/axx.htm
vefoo/a.html
gibi veyafoo/axxx.html
**/a.txt
hera.txt
dosyayla eşleşir: bu paketin alt dizini**/bar/**/*.txt
her.txt
dosyayla eşleşir: bu paketin alt dizinini (ör. sonuç yolunda en az bir dizin)bar
adlı, örneğinxxx/bar/yyy/zzz/a.txt
veyabar/a.txt
(**
değerinin de sıfır ile eşleştiğini unutmayın) segmentler) veyabar/zzz/a.txt
**
, bu dizinin her alt dizinindeki her dosyayla eşleşir paket**
olması gerektiği içinfoo**/a.txt
geçersiz bir kalıp kendi içinde bir segment
exclude_directories
bağımsız değişkeni etkinleştirilirse (1 olarak ayarlanırsa)
tür dizini sonuçlardan çıkarılır (varsayılan 1).
allow_empty
bağımsız değişkeni False
olarak ayarlanırsa
Aksi halde sonuç şöyle olacaksa glob
işlevi hata verir:
boş görünür.
Birkaç önemli sınırlama ve uyarı vardır:
-
glob()
, BUILD dosyası değerlendirmesi sırasında çalıştığı içinglob()
yalnızca kaynak ağacınızdaki dosyaları eşleştirir, hiçbir zaman oluşturulan dosyalar. Hem oluşturulan dosyalara ait açık bir listeyi eklemeniz gerekir. glob'a gönderebilirsiniz. Örneğe bakın:mylib
ve:gen_java_srcs
ile geride. -
Bir kuralın adı eşleşen kaynak dosyayla aynıysa "gölge" seçin.
Bunu anlamak için
glob()
işlevinin bir bu nedenle diğer kurallardaglob()
kullanma özelliğini (ör.srcs = glob(["*.cc"])
), açık şekilde eşleştirilir. Örneğinglob()
,["Foo.java", "bar/Baz.java"]
ancak şurada da bir kural var: "Foo.java" adlı paket (Bazel bu konuda uyarıda bulunsa da buna izin verilir) iseglob()
öğesinin tüketicisi "Foo.Java"yı kullanır. kural (çıkışları) olarak tanımlar. dosyası olarak kaydedebilirsiniz. Görüntüleyin GitHub sorun #10395 bakın. - Küreler, alt dizinlerdeki dosyaları eşleştirebilir. Ve alt dizin adları joker karakterli olabilir. Ancak...
-
Etiketlerin paket sınırını aşmasına izin verilmez ve glob'un bunu aşmasına izin verilmez. alt paketlerdeki dosyalarla eşleşmez.
Örneğin, paketteki
**/*.cc
glob ifadesix
, şu değerleri içermiyorsax/y/z.cc
içermez:x/y
paket olarak bulunur (x/y/BUILD
veya paket yolunda başka bir yerde). Bu glob ifadesinin sonucunun gerçekte mevcut olması gerekir. Yani aynı glob ifadesix/y/z.cc
x/y
veya --deleted_packages tıklayın. - Yukarıdaki kısıtlama tüm glob ifadeleri için geçerlidir: hangi joker karakterleri kullanırlarsa kullansınlar.
-
Dosya adı
.
ile başlayan gizli bir dosya, hem**
hem de*
joker karakterleri. Gizli bir dosyayı eşleştirmek istiyorsanız kalıbınızın bir.
ile başlaması gerekir. Örneğin,*
ve.*.txt
,.foo.txt
ile eşleşecek ancak*.txt
olacak . Gizli dizinler de aynı şekilde eşleştirilir. Gizli dizinler giriş olarak gerekli olmayan dosyaları içerebilir ve ve bellek tüketimini ifade eder. Hariç tutulacaklar bu dizinleri "hariç tut" bölümüne ekleyin liste bağımsız değişkenine dokunun. -
"**" Joker karakterin yalnızca bir köşesinde büyük/küçük harf kullanımı vardır:
"**"
, paketin dizin yoluyla eşleşmiyor. Yani,glob(["**"], exclude_directories = 0)
ifadesinin tüm dosyalarla eşleştiğini söyle ve dizinleri, geçişli olarak yalnızca geçerli paketin dizinindeki dizinler altında birleştirebilirsiniz (tabii ki alt paketlerin dizinlerine girmiyoruz. Önceki not edin).
Genel olarak, uygun bir uzantı (ör. *.html) sağlamaya çalışmanız gerekir. yerine basit bir '*' karakteri kullanın. Daha açık olan ad hem kendi kendini belgeleme yapar hem de yedeğin yanlışlıkla eşleşmemesini sağlar. veya emacs/vi/... otomatik olarak kaydedebilirsiniz.
Derleme kuralları yazarken glob'un öğelerini numaralandırabilirsiniz. Bu her giriş için ayrı kurallar oluşturmayı sağlar. Bkz. expanded glob örneği bölümüne bakın.
Küre Örnekleri
Bu dizindeki tüm Java dosyalarından oluşturulmuş bir Java kitaplığı oluşturun.
ve :gen_java_srcs
kuralı tarafından oluşturulan tüm dosyalar.
java_library( name = "mylib", srcs = glob(["*.java"]) + [":gen_java_srcs"], deps = "...", ) genrule( name = "gen_java_srcs", outs = [ "Foo.java", "Bar.java", ], ... )
deneysel.txt hariç dizin test verilerindeki tüm txt dosyalarını dahil edin. Test verilerinin alt dizinlerindeki dosyaların dahil edilmeyeceğini unutmayın. Eğer bu dosyaların dahil edilmesini istiyorsanız yinelemeli bir glob (**) kullanın.
sh_test( name = "mytest", srcs = ["mytest.sh"], data = glob( ["testdata/*.txt"], exclude = ["testdata/experimental.txt"], ), )
Yinelemeli Küre Örnekleri
Testin, testdata dizinindeki tüm txt dosyalarına ve . BUILD dosyası içeren alt dizinler yoksayılır. (Sınırlamaları inceleyin dikkat edin.)
sh_test( name = "mytest", srcs = ["mytest.sh"], data = glob(["testdata/**/*.txt"]), )
Bu dizindeki tüm Java dosyalarından ve tüm Java dosyalarından oluşturulmuş bir kitaplık oluşturun. alt dizinleri (yolu test adlı bir dizin içerenler hariç) Oluşturmayı azaltabileceğinden, mümkünse bu kalıptan kaçınılmalıdır. artırır ve derleme sürelerini artırır.
java_library( name = "mylib", srcs = glob( ["**/*.java"], exclude = ["**/testing/**"], ), )
Genişletilmiş Yerküre Örnekleri
Geçerli dizinde *_test.cc için ayrı bir genel kural oluşturun dosyadaki satır sayısını hesaplar.
# Conveniently, the build language supports list comprehensions. [genrule( name = "count_lines_" + f[:-3], # strip ".cc" srcs = [f], outs = ["%s-linecount.txt" % f[:-3]], cmd = "wc -l $< >$@", ) for f in glob(["*_test.cc"])]
Yukarıdaki BUILD dosyası //foo paketindeyse ve paket üç tane içeriyorsa
eşleşen dosyalar, a_test.cc, b_test.cc ve c_test.cc ardından çalışıyor
bazel query '//foo:all'
, oluşturulan tüm kuralları listeler:
$ bazel query '//foo:all' | sort //foo:count_lines_a_test //foo:count_lines_b_test //foo:count_lines_c_test
seç
select( {conditionA: valuesA, conditionB: valuesB, ...}, no_match_error = "custom message" )
select()
, kural özelliği oluşturan yardımcı işlevdir
yapılandırılabilir.
Bu, her bir metin parçasının sağ tarafını
neredeyse
özelliği atama yöntemini kullanabilirsiniz. Böylece değeri komut satırı Bazel işaretlerine bağlı olur.
Örneğin bunu, platforma özgü bağımlılıkları tanımlamak ya da
Bir kuralın "geliştirici" içinde yerleşik olup olmadığına bağlı olarak farklı kaynaklar yerleştirmek
- "yayınlama" yatırım yapmanız önemlidir.
Temel kullanım aşağıdaki gibidir:
sh_binary( name = "mytarget", srcs = select({ ":conditionA": ["mytarget_a.sh"], ":conditionB": ["mytarget_b.sh"], "//conditions:default": ["mytarget_default.sh"] }) )
Bu,srcs
normal etiketinin değiştirilmesiyle yapılandırılabilen bir sh_binary
eşlenen bir select
çağrısıyla liste ataması
yapılandırma koşullarını eşleşen değerlere ayarlayabilirsiniz. Her koşul bir etikettir
referans:
config_setting
veya
constraint_value
,
Hangi "eşleşir" hedefin yapılandırması,
değerler. Daha sonra mytarget#srcs
değeri,
etiket listesi geçerli çağrıyla eşleşiyor.
Notlar:
- Herhangi bir çağrıda tam olarak bir koşul seçildi.
- Birden fazla koşul eşleşiyorsa ve koşullardan biri diğerlerinin uzmanlığıysa uzmanlaşmaya öncelik verilecek. B koşulu, B koşulun işaretleri ve kısıtları aynıysa A koşulunun özelleştirilmesi değerlerini A ile birlikte bazı ek işaretler veya kısıtlama değerleri olarak sunar. Bu ayrıca uzmanlaşma çözümlemesinin, yalnızca aşağıdaki 2. Örnek'te gösterilmiştir.
- Birden fazla koşul eşleşiyorsa ve bir koşul tüm koşulların Bazel bir hata ile başarısız olur.
- Özel sözde etiket
//conditions:default
: hiçbir koşul eşleşmediği takdirde eşleşeceği kabul edilir. Bu koşul dışarıda bırakıldığında, hatadan kaçınmak için başka bir kuralın eşleşmesi gerekir. select
, daha büyük bir alanın içine yerleştirilebilir özellik ataması. Dolayısıylasrcs = ["common.sh"] + select({ ":conditionA": ["myrule_a.sh"], ...})
vesrcs = select({ ":conditionA": ["a.sh"]}) + select({ ":conditionB": ["b.sh"]})
, geçerli ifadelerdir.select
, tüm özelliklerle olmasa da çoğu özellikle çalışır. Uyumsuz özellikleri, dokümanlarındanonconfigurable
olarak işaretlenmiştir.alt paketler
subpackages(include, exclude=[], allow_empty=True)
subpackages()
,glob()
işlevine benzer bir yardımcı işlevdir alt paketleri listeleyen bir tarayıcı oluşturur. Aynı yol kalıplarınıglob()
olarak tanımlar ve şu anda yüklenen BUILD dosyasının doğrudan alt öğesidir. Dahil etme ve ekleme ile ilgili ayrıntılı açıklama ve örnekler için glob'a bakın. modelleri hariç tutun.Döndürülen alt paketler listesi, sıralanmış haldedir ve verilen kalıplarla eşleşen geçerli yükleme paketine göre yolları
include
(exclude
kapsamındakiler hariç).Örnek
Aşağıdaki örnekte
foo/BUILD
paketinin tüm doğrudan alt paketleri listelenmektedir# The following BUILD files exist: # foo/BUILD # foo/bar/baz/BUILD # foo/sub/BUILD # foo/sub/deeper/BUILD # # In foo/BUILD a call to subs = subpackages(include = ["**"]) # results in subs == ["sub", "bar/baz"] # # 'sub/deeper' is not included because it is a subpackage of 'foo/sub' not of # 'foo'
Genel olarak, bu işlevi doğrudan çağırmak yerine, 'alt paketleri' modülü skylib olarak değiştirin.