Kurallar
takma ad
Kural kaynağını görüntülealias(name, actual, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)
alias
kuralı, kurala ad verilebilecek başka bir ad oluşturur.
Takma ad yalnızca "normal" için çalışır belirler. Özellikle, package_group
ve test_suite
için diğer ad kullanılamaz.
Takma ad oluşturma, bir hedefin yeniden adlandırılmasının gerektiği büyük depolarda yardımcı olabilir. çok sayıda dosyada değişiklik yapabilir. Ayrıca, bir alan adında depolanan bir select işlev çağrısını görüntülemek için bu mantığı birden çok hedefe sahip olabilir.
Takma ad kuralının kendi görünürlük bildirimi vardır. Diğer tüm açılardan bakıldığında, bu kurala benzer (ör. testonly takma adda yok sayılır; yalnızca test amaçlı olma ( bunun yerine referans verilen kuralın kullanıldığı durumlar) kullanılır:
-
Komut satırında takma adından bahsedilirse testler çalıştırılmaz. Takma ad tanımlamak için
referans verilen testi çalıştıran bir
test_suite
kullanın.tests
içinde tek bir hedefi olan kural özelliğini gönderin. -
Ortam grupları tanımlanırken
environment
kurallarının takma adları desteklenir.--target_environment
komut satırında desteklenmez iki seçenekten birini seçebiliriz.
Örnekler
filegroup( name = "data", srcs = ["data.txt"], ) alias( name = "other", actual = ":data", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
actual
|
Etiket; zorunlu Bu takma adın belirttiği hedef. Kural olması gerekmez, giriş de olabilir dosyası olarak kaydedebilirsiniz. |
config_setting
Kural kaynağını görüntüleconfig_setting(name, constraint_values, define_values, deprecation, distribs, features, flag_values, licenses, tags, testonly, values, visibility)
Aşağıdakiler için beklenen bir yapılandırma durumuyla (derleme işaretleri veya platform kısıtlamaları olarak ifade edilir) eşleşir: amacına hizmet eder. Şu öğe için seçiminizi inceleyin: nasıl kullanılır? Yapılandırılabilir özellikler başlıklı makaleyi inceleyin.
Örnekler
Aşağıdakiler, --compilation_mode=opt
veya
-c opt
(açık olarak komut satırında veya dolaylı olarak .bazelrc dosyalarından):
config_setting( name = "simple", values = {"compilation_mode": "opt"} )
Aşağıdaki, ARM'yi hedefleyen ve özel tanımlamayı uygulayan herhangi bir derlemeyle eşleşir
FOO=bar
(örneğin, bazel build --cpu=arm --define FOO=bar ...
):
config_setting( name = "two_conditions", values = { "cpu": "arm", "define": "FOO=bar" } )
Aşağıdakiler,
kullanıcı tanımlı işaret
--//custom_flags:foo=1
(açıkça komut satırında veya dolaylı olarak
.bazelrc dosyaları):
config_setting( name = "my_custom_flag_is_set", flag_values = { "//custom_flags:foo": "1" }, )
Aşağıdakiler, x86_64 mimarisi ve glibc platformuna sahip bir platformu hedefleyen tüm derlemelerle eşleşir
etiketli bir constraint_value
olduğu varsayıldığında, sürüm 2.25
//example:glibc_2_25
. Bir platformun, ek bir tanımlayıcı tanımlaması durumunda da eşleştiğini unutmayın.
değeri için daha yüksek değer sunar.
config_setting( name = "64bit_glibc_2_25", constraint_values = [ "@platforms//cpu:x86_64", "//example:glibc_2_25", ] ). Tüm bu durumlarda yapılandırmanın derleme içinde değişmesi mümkündür. Örneğin, farklı bir platform için bir hedef oluşturulmalıdır. Yani, bir kullanıcı
config_setting
üst düzey komut satırı işaretleriyle eşleşmiyor, yine de eşleşebilir
bazılarını anlatacağım.
Notlar
- Birden fazla öğe oluşturulduğunda ne olacağını görmek için seçime bakın.
config_setting
öğeleri mevcut yapılandırma durumuyla eşleşiyor. - Kısaltılmış biçimleri (ör.
--compilation_mode
--c
),values
tanımlarının tamamı tam formu kullanmalıdır. Bunlar otomatik olarak iki formdan birini kullanarak çağrıları eşleştirin. -
Bir işaret birden fazla değer alıyorsa (ör.
--copt=-Da --copt=-Db
veya liste türü) Starlark bayrağı),"a"
isevalues = { "flag": "a" }
eşleşir listenin herhangi bir yerinde mevcut olmalıdır.values = { "myflag": "a,b" }
aynı şekilde çalışır: Bu,--myflag=a --myflag=b
--myflag=a --myflag=b --myflag=c
,--myflag=a,b
ve--myflag=c,b,a
. Tam anlamlar işaretidir. Örneğin,--copt
aynı öğede birden fazla değeri desteklemez. örnek:--copt=a,b
["a,b"]
üretirken--copt=a --copt=b
["a", "b"]
üretir (yanivalues = { "copt": "a,b" }
ilki ile eşleşir ancak ikincisiyle eşleşmez). Ancak--ios_multi_cpus
(Apple kuralları için) şur:-ios_multi_cpus=a,b
veios_multi_cpus=a --ios_multi_cpus=b
["a", "b"]
üretir. İşaret tanımlarını kontrol edin ve ve koşulları dikkatlice inceleyin. - Yerleşik derleme işaretleri tarafından modellenmeyen koşullar tanımlamanız gerekirse
Starlark tarafından tanımlanan işaretler.
--define
de kullanabilirsiniz, ancak bu daha zayıf teklif verir desteği vardır ve önerilmez. Görüntüleyin burayı tıklayın. - Farklı paketlerde aynı
config_setting
tanımlarını tekrarlamaktan kaçının. Bunun yerine, standart pakette tanımlanan ortak birconfig_setting
öğesine başvurun. values
define_values
veconstraint_values
aynıconfig_setting
içinde herhangi bir kombinasyonda kullanılabilir ancak en az bir kombinasyon olmalıdır belirli birconfig_setting
için ayarlanabilir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
constraint_values
|
Etiket listesi; nonyapılandırabilir; varsayılan değer constraint_values kümesi
(config_setting ) ile eşleşecektir. (Yürütme platformu
dikkate alınmalıdır.) Platformun sahip olduğu ek kısıtlama değerleri yoksayılır. Görüntüleyin
Yapılandırılabilir Derleme Özellikleri'ni inceleyin.
İki İki |
define_values
|
Sözlük: Dize -> String; nonconfig; varsayılan değer values ile aynı ancak
özellikle de --define bayrağı için.
Bunun anlamı şudur: config_setting( name = "a_and_b", values = { "define": "a=1", "define": "b=2", }). çalışmıyor, çünkü aynı anahtar ( config_setting( name = "a_and_b", define_values = { "a": "1", "b": "2", }).
|
flag_values
|
Sözlük: label -> String; nonyapılandırabilir; varsayılan değer values ile aynı ancak
için
kullanıcı tanımlı derleme işaretleri hakkında daha fazla bilgi edinin.
Bu, farklı bir özelliktir çünkü kullanıcı tanımlı işaretler, işlem yaparken etiket olarak yerleşik flag'lere rastgele dizeler referans verilir. |
values
|
Sözlük: Dize -> String; nonconfig; varsayılan değer Bu kural, 2023'e kadarki sürümlerden birine sahip yapılandırılmış hedefin
bunu bir Kolaylık sağlamak amacıyla, yapılandırma değerleri derleme işaretleri olarak (
önceki Bir işaret, komut satırında açıkça ayarlanmazsa varsayılan değeri kullanılır.
Bir anahtar sözlükte birden çok kez görünüyorsa yalnızca son örneği kullanılır.
Bir anahtar, komut satırında birden fazla kez ayarlanabilen bir işarete (ör.
|
dosya grubu
Kural kaynağını görüntülefilegroup(name, srcs, data, compatible_with, deprecation, distribs, features, licenses, output_group, restricted_to, tags, target_compatible_with, testonly, visibility)
Bir dizi hedefin çıktılarını tek bir altında toplamak için filegroup
kullanın
etiket.
filegroup
, komut satırında hedefleri listelemenin veya
başka bir kuralın bir özelliğine bağlıdır. Çünkü hedefler,
farklı çıkışlar da vardır. Bunlar aynı şekilde toplanmaz. Ancak bu, özellikle de
Örneğin, bir genrule kelimesinin srcs
özelliğinde ya da
*_binary kuralının data
özelliği.
Dizinlere doğrudan referans vermek yerine filegroup
kullanılması önerilir.
Derleme sistemi tüm dosyalar hakkında tam bilgiye sahip olmadığından ikincisi sessizdir
olduğundan, bu dosyalar değiştiğinde yeniden oluşturulmayabilir. Şununla birleştirildiğinde:
glob, filegroup
tüm dosyaların
açıkça bilinen URL'leri içerir.
Örnekler
İki kaynak dosyadan oluşan bir filegroup
oluşturmak için
filegroup( name = "mygroup", srcs = [ "a_file.txt", "//a/library:target", "//a/binary:target", ], )
Veya bir test verisi dizini oluşturmak için bir glob
kullanın:
filegroup( name = "exported_testdata", srcs = glob([ "testdata/*.dat", "testdata/logs/**/*.log", ]), )
Bu tanımlardan yararlanmak için filegroup
öğesine herhangi bir kuraldan etiket ekleyin:
cc_library( name = "my_library", srcs = ["foo.cc"], data = [ "//my_package:exported_testdata", "//my_package:mygroup", ], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
srcs
|
Etiket listesi; varsayılan değer
Bir glob ifadesinin sonucu genellikle
|
data
|
Etiket listesi; varsayılan değer
|
output_group
|
String; varsayılan değer Bir "çıktı grubu" bir hedefin çıktı yapılarının kategorisidir; nasıl uygulayacağımızı göreceğiz. |
Genquery
Kural kaynağını görüntülegenquery(name, deps, data, compatible_with, compressed_output, deprecation, distribs, exec_compatible_with, exec_properties, expression, features, licenses, opts, restricted_to, scope, strict, tags, target_compatible_with, testonly, visibility)
genquery()
,
Bazel sorgu dili ve sonucu dökümler
bir dosyaya koyabilirsiniz.
Derlemenin tutarlılığını sağlamak için sorgunun yalnızca
scope
hükümlerinde belirtilen hedeflerin geçişli olarak kapatılması
özelliğini gönderin. Bu kuralı ihlal eden sorgular yürütme sırasında şu durumlarda başarısız olur:
strict
belirtilmemiş veya doğru (strict
yanlışsa,
kapsam dışı hedefler bir uyarıyla atlanır). İlgili içeriği oluşturmak için kullanılan
bunun olmamasını sağlamanın en kolay yolu, aynı etiketlerden bahsetmektir.
sorgu ifadesinde olduğu gibidir.
Burada ve komutta izin verilen sorgular arasındaki tek fark
satırı, joker karakter hedefleme özelliklerini içeren sorgular (ör.
//pkg:*
veya //pkg:all
) burada kullanılamaz.
Bunun iki nedeni vardır: Birincisi, çünkü genquery
bir sorgu kullanabilirsiniz. ve ikinci olarak, BUILD
dosya
joker karakter bağımlılıklarını desteklemez (ör. deps=["//a/..."]
izin verilmez).
Genquery'nin çıkışı, belirleyici çıktıyı uygulamak için sözlüksel olarak sıralanır.
--output=graph|minrank|maxrank
hariç veya somepath
üst düzey işlev olarak kullanılır.
Çıkış dosyasının adı kuralın adıdır.
Örnekler
Bu örnekte, belirtilen hedefi bir dosyaya yükleyebilirsiniz.
genquery( name = "kiwi-deps", expression = "deps(//kiwi:kiwi_lib)", scope = ["//kiwi:kiwi_lib"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
compressed_output
|
Boole; varsayılan değer True ise sorgu çıkışı GZIP dosyası biçiminde yazılır. Bu ayar kullanılabilir
sorgu çıktısının büyük olması bekleniyorken Bazel'ın bellek kullanımında ani artışlar olmaması için. Bazel
220 bayttan büyük sorgu çıkışlarını dahili olarak sıkıştırır.
olduğundan, bu ayarın True olarak ayarlanması, uygulanan
kullanır. Ancak, Bazel'ın çıkış dosyasını yazarken sıkıştırmayı atlamasını sağlar.
Bu da bellek yoğun olabilir.
|
expression
|
String; zorunlu Yürütülecek sorgu. Komut satırının ve BUILD dosyalarındaki diğer yerlerin aksine, buradaki etiketler, çalışma alanının kök dizinine göre çözümlenir. Örneğin,a/BUILD dosyasındaki bu özellikte bulunan :b etiketi,
hedef //:b .
|
opts
|
Dize listesi; varsayılan değer bazel query öğesine geçirilebilecek seçenekler. Bazı sorgu seçeneklerine izin verilmiyor
burada: --keep_going , --query_file , --universe_scope ,
--order_results ve --order_output . Burada belirtilmeyen seçenekler
, bazel query komut satırındaki gibi varsayılan değerlerine sahip olur.
|
scope
|
Etiket listesi; zorunlu Sorgunun kapsamı. Sorgunun, geçişli olmayan hedeflere dokunmasına izin verilmiyor söz konusu hedeflerin kapatılmasına yol açabilir. |
strict
|
Boole; varsayılan değer |
Genrule
Kural kaynağını görüntülegenrule(name, srcs, outs, cmd, cmd_bash, cmd_bat, cmd_ps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, executable, features, licenses, local, message, output_licenses, output_to_bindir, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)
genrule
, kullanıcı tanımlı Bash komutunu kullanarak bir veya daha fazla dosya oluşturur.
Genrule, görev için belirli bir kural yoksa kullanabileceğiniz genel derleme kurallarıdır.
Örneğin, Bash tek satırlık bir hazırlayabilirsiniz. Ancak C++ dosyalarını derlemeniz gerekiyorsa
yerine mevcut cc_*
kuralları uygulanır, çünkü
sizin için.
Genrule öğesinin, komut bağımsız değişkenini yorumlamak için kabuk gerektirdiğini unutmayın. PATH üzerinde bulunan rastgele programlara referans vermek de kolaydır. Ancak bu, komutu hermetik olmayan ve tekrarlanabilir olmayabilir. Yalnızca tek bir aracı çalıştırmanız gerekiyorsa run_binary .
Diğer her eylem gibi, ustaların yarattıkları eylem de kendi özgeçmişleri hakkında hiçbir
çalışma dizini; tüm Bazel garantileri, bildirilen girişlerinin
$(location)
etiketinin etiketi için döndürdüğü yol. Örneğin, işlem
uzaktan yürütmeye tabiyseniz korumalı alanın veya uzaktan yürütmenin birlikte kullanılması
çalışma dizinine ekleyin. Doğrudan çalıştırılırsa (standalone
stratejisi kullanılarak), çalışan
dizin yürütme kökü olur, yani bazel info execution_root
işlevinin sonucu olur.
Testleri çalıştırmak için genrule kullanmayın. Test ve test için özel dağıtımlar vardır
diğer sonuçları da alabilirsiniz. Genellikle testlerin çalıştırılması gerekir
hedef mimari üzerinde çalışmaya devam eder. Genrule ise yürütülürken
üzerine konuşacağız (ikisi farklı olabilir). Genel bir amaca ihtiyacınız varsa
test kuralı için sh_test
kullanın.
Çapraz derlemede dikkat edilmesi gereken noktalar
Aşağıdakilerle ilgili daha fazla bilgi için kullanıcı kılavuzuna bakın: bir video hazırladı.
Genrules derleme sırasında çalışırken, çıkışları genellikle derlemeden sonra, dağıtım veya teşvik etmek anlamına gelir. Mikrodenetleyici için C kodu derleme örneğini düşünün: Derleyici, C kodunu kabul eder kaynak dosyalarını kullanır ve mikrodenetleyicide çalışan kod oluşturur. Oluşturulan kod açık bir şekilde oluşturmak için kullanılan CPU'da, ancak C derleyicisinde (kaynaktan derlendiyse) çalıştırılamaz sahip olması gerekir.
Derleme sistemi, derlemenin çalıştığı makineleri tanımlamak için exec yapılandırmasını kullanır. ve derleme çıkışının oluşturulduğu makineleri açıklayan hedef yapılandırma çalışması gerekiyordu. Her birini yapılandırma seçenekleri sunar ve çakışmaları önlemek için ilgili dosyaları ayrı dizinlere yerleştirin.
Genrule'lar için derleme sistemi, bağımlılıkların uygun şekilde oluşturulmasını sağlar:
srcs
, (gerekirse) hedef yapılandırması için oluşturulur,
tools
, exec yapılandırması için oluşturulmuştur ve çıkış şu şekilde kabul edilir:
target yapılandırması için olduğundan emin olun. Ayrıca
"Yap" değişkenlerini ilgili araçlara geçirebilir.
Genrule, kasıtlı olarak hiçbir deps
özelliği tanımlamaz: Diğer yerleşik kurallar,
otomatik olarak nasıl yapılacağını belirlemek için kurallar arasında iletilen dile bağlı meta bilgiler
ancak bu düzeyde otomasyon genel kurallar için mümkün değildir. Genrules çalışmaları
tamamen dosya ve Runfiles düzeyinde olur.
Özel Durumlar
Exec-exec derlemesi: Bazı durumlarda derleme sisteminin,
çıkışı da derleme sırasında yürütülebilir. Örneğin bir genrule, özel derleyici oluşturuyorsa
sonra başka bir gen kural da kullanılırsa, ilkinin çıktısını
exec yapılandırmasıdır. Çünkü derleyici, diğer genel kuralda bu konumda çalışır. Böyle durumlarda
derleme sistemi doğru şeyi otomatik olarak yapar: srcs
ve sonraki
Hedef yerine, yönetici yapılandırması için ilk genel kuralın outs
kadarı
yapılandırma. Daha fazla bilgi için kullanım kılavuzuna bakın
bilgisi.
JDK ve C++ Araçları: JDK'dan veya C++ derleyici paketinden bir araç kullanmak için derleme sistemi, kullanılacak bir değişken kümesi sağlar. "Marka" bölümüne bakın değişkeni bolca fırsat sunuyor.
Genel ortam
Genrule komutu, bir komut çalıştırıldığında başarısız olacak şekilde yapılandırılan bir Bash kabuğu tarafından yürütülür
veya ardışık düzenin başarısız olması durumunda set -e -o pipefail
.
Derleme aracı, Bash komutunu
yalnızca PATH
, PWD
,
TMPDIR
ve birkaç tane daha.
Derlemelerin tekrar oluşturulabilir olmasını sağlamak için kullanıcının kabuğunda tanımlanan çoğu değişken
ortamın genrule komutuna geçirilmemesini sağlar. Ancak, Bazel (
Blaze), kullanıcının PATH
ortam değişkeninin değerini geçirir.
PATH
değerinde yapılan herhangi bir değişiklik, Bazel'in komutu yeniden yürütmesine neden olur.
yardımcı oluyorum.
Bir genrule komutu, şu işlemler dışında ağa erişmemelidir: komutun alt öğelerini içerir (ancak bu şu anda zorunlu değildir).
Derleme sistemi mevcut çıkış dosyalarını otomatik olarak siler, ancak gerekli üst öğeleri dizinleri kontrol eder. Ayrıca, hata durumunda çıkış dosyalarını da kaldırır.
Genel Tavsiye
- Bir genel kural tarafından çalıştırılan araçların deterministik ve hermetik olduğundan emin olun. Proje yöneticisinin zaman damgaları kullanabilir ve kümeler ve haritalar için sabit bir sıralamanın yanı sıra, çıkışa yalnızca göreli dosya yollarını yazar, mutlak yollar içermez. Bu kurala uyulmaması, beklenmedik yapı davranışına yol açabilir (Bazel'in beklediğiniz bir kuralı yeniden oluşturmaması) ve önbellek performansını düşürür.
$(location)
öğesini çıkışlar, araçlar ve kaynaklar için yoğun bir şekilde kullanın. Nedeni: çıkış dosyalarının farklı yapılandırmalar için ayrılması, genrule'lar sabit kodlu uygulamalara ve/veya mutlak yollardır.- Aynı veya çok benzer genelerlerin kullanılması ihtimaline karşı ortak bir Starlark makrosu yazın birden çok yer olduğunu görebilirsiniz. Genel kural karmaşıksa bir senaryoda veya bir Starlark kuralı. Bu sayede okunabilirliği ve test edilebilirliği iyileştirebilirsiniz.
- Çıkış kodunun, kuralın başarılı veya başarısız olduğunu doğru şekilde gösterdiğinden emin olun.
- stdout veya stderr'e bilgilendirme amaçlı iletiler yazmayın. Bu, hata ayıklama için kullanışlı olsa da kolayca gürültüye dönüşebilir. başarılı bir genel kuralın sessiz olması gerekir. Diğer yandan, başarısız bir genel iyi hata mesajları vermelidir.
$$
evaluates to a$
, a literal dollar-sign, so in order to invoke a shell command containing dollar-signs such asls $(dirname $x)
, one must escape it thus:ls $$(dirname $$x)
.- Sembol bağlantılar ve dizinler oluşturmaktan kaçının. Bazel, dizin/sembol bağlantıyı kopyalamaz genrules tarafından oluşturulan yapı ve dizinler için bağımlılık kontrolü sağlam değil.
- Diğer kurallarda genel kurala referans verirken genel kuralın etiketini veya
ayrı ayrı çıkış dosyalarının etiketlerini tanımlar. Bazen tek bir yaklaşım daha okunabilir, bazen
other: Bir tüketici kuralının
srcs
öğesinde çıkışlara ada göre referansta bulunmak önlenir. istemeden genrule ilgili diğer çıkışları toplamak birçok çıktı üretir.
Örnekler
Bu örnek, foo.h
oluşturur. Hiç kaynak yok çünkü komut,
herhangi bir giriş. "İkili" tarafından çalıştırılan bir perl komut dosyası, genrule ile aynı pakettedir.
genrule( name = "foo", srcs = [], outs = ["foo.h"], cmd = "./$(location create_foo.pl) > \"$@\"", tools = ["create_foo.pl"], )
Aşağıdaki örnekte, filegroup
özelliğinin nasıl kullanılacağı gösterilmektedir
ve başka bir genrule
öğesinin çıktıları. Bunun yerine $(SRCS)
kullanıldığında
açık $(location)
yönergesi de kullanılabilir; bu örnekte ikincisi
bir şablondur.
genrule( name = "concat_all_files", srcs = [ "//some:files", # a filegroup with multiple files in it ==> $(locations) "//other:gen", # a genrule with a single output ==> $(location) ], outs = ["concatenated.txt"], cmd = "cat $(locations //some:files) $(location //other:gen) > $@", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. Bu kurala Başka bir BUILD dokümanın srcs veya deps bölümü
kurallar. Kural, kaynak dosyalar oluşturuyorsa
srcs özelliği için de kullanılmaktadır.
|
srcs
|
Etiket listesi; varsayılan değer
Bu özellik,
Derleme sistemi, genrule çalıştırmadan önce bu ön koşulların derlenmesini sağlar
komut; orijinal derleme isteğiyle aynı yapılandırma kullanılarak oluşturulurlar. İlgili içeriği oluşturmak için kullanılan
bu önkoşullara ilişkin dosyaların adları, komutta
|
outs
|
Dosya adlarının listesi; nonyapılandırabilir; zorunlu Bu kural tarafından oluşturulan dosyaların listesi.Çıkış dosyaları, paket sınırlarını geçmemelidir. Çıkış dosya adları pakete göre yorumlanır.
Genrule komutunun her çıkış dosyasını önceden belirlenmiş bir konumda oluşturması beklenir.
Konum, |
cmd
|
String; varsayılan değer $(location)
ve "Yap" hükümlerine tabidir değişkeni değiştirmeyin.
cmd_bash , cmd_ps ve cmd_bat ,
(hiçbiri geçerli değilse)
Komut satırı uzunluğu, platform sınırını (Linux/macOS'te 64K, Windows'da 8K) aşıyorsa
sonra genrule, komutu bir komut dosyasına yazar ve sorunu çözmek için o komut dosyasını yürütür. Bu
tüm cmd özellikleri ( |
cmd_bash
|
String; varsayılan değer Bu özelliğin önceliği, |
cmd_bat
|
String; varsayılan değer Bu özelliğin önceliği,
|
cmd_ps
|
String; varsayılan değer Bu özelliğin önceliği
Powershell'in kullanımını kolaylaştırmak ve hataya daha az açık hale getirmek için aşağıdaki komutu çalıştırıyoruz genrule öğesinde Powershell komutunu yürütmeden önce ortamı ayarlama
|
executable
|
Boole; nonconfig; varsayılan değer
Bu işareti True (Doğru) değerine ayarlamak, çıktının yürütülebilir bir dosya olduğu ve
Oluşturulan yürütülebilir dosya için veri bağımlılıklarının tanımlanması desteklenmiyor. |
local
|
Boole; varsayılan değer
Doğru değerine ayarlanırsa bu seçenek,
Bu, "yerel" sağlamaya eşdeğerdir etiket olarak ( |
message
|
String; varsayılan değer
Bu derleme adımı yürütüldüğünde yazdırılacak bir ilerleme mesajı. Varsayılan olarak
"Çıkış oluşturuluyor" mesajı (ya da eşit derecede yamsız) bir şeyler
tercih edebilirsiniz. |
output_licenses
|
Lisans türü; varsayılan değer common attributes
|
output_to_bindir
|
Boole; nonconfig; varsayılan değer
Doğru değerine ayarlanırsa bu seçenek çıkış dosyalarının |
tools
|
Etiket listesi; varsayılan değer
Derleme sistemi, genrule komutunu çalıştırmadan önce bu ön koşulların derlenmesini sağlar;
exec kullanılarak oluşturulurlar.
yapılandırma dâhildir. Bir
tek
|
starlark_doc_extract
Kural kaynağını görüntülestarlark_doc_extract(name, deps, src, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, render_main_repo_name, restricted_to, symbol_names, tags, target_compatible_with, testonly, visibility)
starlark_doc_extract()
, kurallar ve işlevler (
makroları, özellikleri ve belirli bir .bzl
içerisinde tanımlanan veya yeniden dışa aktarılan sağlayıcıları
.scl
dosyası. Bu kuralın çıktısı, tanımlandığı şekilde bir ModuleInfo
ikili protokolüdür
inç
stardoc_output.proto
"Bazel kaynak ağacı"dır.
Dolaylı çıkış hedefleri
name.binaryproto
(varsayılan çıkış): AModuleInfo
ikili protokolü.name.textproto
(yalnızca açıkça talep edildiğinde oluşturulur): metinname.binaryproto
proto sürümü.
Uyarı: Bu kuralın çıkış biçiminin kararlı olacağı garanti edilmez. Temel olarak Stardoc tarafından dahili kullanım.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer load() tarafından gönderilen Starlark dosyalarını sarmalayan hedeflerin listesi
src . Bu hedeflerin normal kullanım altında olması gerekir
bzl_library
hedefler ancak starlark_doc_extract kuralı bunu zorunlu kılmaz ve
DefaultInfo içinde Starlark dosyaları sağlayan herhangi bir hedef.
Sarmalanmış Starlark dosyalarının kaynak ağaçtaki dosyalar olması gerektiğini unutmayın; Bazel
|
src
|
Etiket; zorunlu Belgelerin çıkarılacağı Starlark dosyası.Bunun kaynak ağaçta bir dosya olması gerektiğini unutmayın; Bazel, |
render_main_repo_name
|
Boole; varsayılan değer //foo:bar.bzl ,
@main_repo_name//foo:bar.bzl ) tıklayın.
Ana depo için kullanılacak ad Bu özellik, şunun için doküman oluştururken |
symbol_names
|
Dize listesi; varsayılan değer
|
test_suite
Kural kaynağını görüntületest_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, tests, visibility)
test_suite
, "faydalı" olarak kabul edilen bir dizi testi tanımlar ne kadar önemli olduğunu gördük. Bu
projelerin test setlerini tanımlamasına olanak tanır. Örneğin, "testler", "bizim
ve ekibin stresini
ölçmenizi sağlıyor" "tüm küçük testler" olabilir. bazel test
komutu bu sıralamaya uyar
kuruluşun: bazel test //some/test:suite
gibi bir çağrı için önce Bazel
//some/test:suite
hedefi tarafından geçişli olarak dahil edilen tüm test hedeflerini numaralandırır (
çağrısına "test_suite genişletmesi" yazın. Ardından, Bazel bu hedefleri oluşturup test eder.
Örnekler
Mevcut paketteki tüm küçük testleri çalıştıracak bir test paketi.
test_suite( name = "small_tests", tags = ["small"], )
Belirli bir test grubunu çalıştıran bir test paketi:
test_suite( name = "smoke_tests", tests = [ "system_unittest", "public_api_unittest", ], )
Mevcut pakette stabil olmayan tüm testleri çalıştırmak için kullanılan bir test paketi.
test_suite( name = "non_flaky_test", tags = ["-flaky"], )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
tags
|
Dize listesi; nonconfig; varsayılan değer "-" ile başlayan etiketler negatif etiket olarak kabul edilir. İlgili içeriği oluşturmak için kullanılan önce "-" karakteri, etiketin bir parçası olarak kabul edilmediğinden paket etiketi "-küçük" bir testin "small" ile eşleşir seçin. Diğer tüm etiketler dikkate alınır pozitif etiketlerdir. İsteğe bağlı olarak, pozitif etiketleri daha açık hale getirmek için etiketler "+" karakteri olacaktır. Bu karakter, etiket metninin parçası olarak değerlendirilmez. Google yalnızca olumlu ve olumsuz ayrımların daha kolay okunmasını sağlıyor. Yalnızca pozitif etiketlerin tümüyle ve negatiflerin hiçbiri ile eşleşen kuralları test edin etiketleri test paketine dahil edilir. Bunun, hata kontrolünün başarısız olacağı filtrelenen testlerdeki bağımlılıklar atlanır. ve atlanan bağımlılıkları testlerin yine de yasal olması (ör. görünürlük kısıtlamaları nedeniyle engellenmemesi) gerekir.
Bir testin
Birlikte kullanılamayan etiketlere sahip testleri içeren bir |
tests
|
Etiket listesi; nonyapılandırabilir; varsayılan değer
Dilinden bağımsız olarak burada tüm
|