Bu bölümde, birçok işlevde veya kural oluşturma işleminde ortak olan çeşitli terimler ve kavramlar açıklanmaktadır.
İçindekiler
- Bourne kabuğu belirtkeleme
- Etiket Genişletme
- Çoğu derleme kuralı tarafından tanımlanan tipik özellikler
- Tüm derleme kurallarında ortak olan özellikler
- Tüm test kurallarında ortak olan özellikler (*_test)
- Tüm ikili kurallarda ortak özellikler (*_binary)
- Yapılandırılabilir özellikler
- Dolaylı çıkış hedefleri
Bourne kabuğu belirtkeleme
Bazı kuralların belirli dize özellikleri, Bourne kabuğunun şifreleme kurallarına göre birden çok kelimeye ayrılır: Tırnak içinde olmayan alanlar ayrı kelimeleri sınırlar. Jetonlara ayırma işlemini önlemek için tek ve çift tırnak karakterleri ve ters eğik çizgiler kullanılır.
Bu tokenizasyona tabi olan özellikler, bu belgedeki tanımlarında açıkça belirtilmiştir.
"Make" değişken genişletmesine ve Bourne kabuğu jetona dönüştürmeye tabi özellikler, genellikle rastgele seçenekleri derleyicilere ve diğer araçlara iletmek için kullanılır. Bu tür özelliklere örnek olarak cc_library.copts
ve java_library.javacopts
verilebilir.
Bu ikameler birlikte, tek bir dize değişkeninin yapılandırmaya özel seçenek kelimeleri listesine genişlemesine olanak tanır.
Etiket genişletme
Çok az sayıda kuralın bazı dize özellikleri etiket genişletmesine tabidir: Bu dizeler alt dize olarak //mypkg:target
gibi geçerli bir etiket içeriyorsa ve bu etiket, mevcut kuralın bildirilmiş bir ön koşuluysa hedef
//mypkg:target
ile temsil edilen dosyanın yol adına genişletilir.
Örnek özellikler arasında genrule.cmd
ve cc_binary.linkopts
yer alır. Göreli etiketlerin genişletilip genişletilmediği, birden fazla dosyaya genişleyen etiketlerin nasıl ele alındığı vb. gibi sorunlar söz konusu olduğunda ayrıntılar her durumda önemli ölçüde farklılık gösterebilir. Ayrıntılar için kural özelliği belgelerini inceleyin.
Çoğu derleme kuralı tarafından tanımlanan tipik özellikler
Bu bölümde, hepsi olmasa da birçok derleme kuralı tarafından tanımlanan özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
data |
Etiket listesi; varsayılan değer: Bu kuralın çalışma zamanında ihtiyaç duyduğu dosyalar. Dosya veya kural hedeflerini listeleyebilir. Genellikle tüm hedeflere izin verir.
Yeni kurallar, çalışma zamanında başka girişler kullanabilecek girişleri işliyorlarsa bir |
deps |
Etiket listesi; varsayılan değer:
Bu hedefe ilişkin bağımlılıklar. Genellikle yalnızca kural hedefleri listelenmelidir. (Bazı kurallar dosyaların doğrudan Dile özgü kurallar, genellikle listelenen hedefleri belirli sağlayıcılara sahip olanlarla sınırlar.
Bir hedefin
Çoğu zaman |
licenses |
Dize listesi; yapılandırılabilir değildir; varsayılan: Bu hedef için kullanılacak lisans türü dizelerinin listesi. Bu, Bazel'ın artık kullanmadığı, kullanımdan kaldırılmış lisanslama API'sinin bir parçasıdır. Bunu kullanmayın. |
srcs |
Etiket listesi; varsayılan değer:
Bu kural tarafından işlenen veya eklenen dosyalar. Genellikle dosyaları doğrudan listeler ancak varsayılan çıkışları eklemek için kural hedeflerini ( Dile özgü kurallar, genellikle listelenen dosyaların belirli dosya uzantılarına sahip olmasını gerektirir. |
Tüm derleme kurallarında ortak özellikler
Bu bölümde, tüm derleme kurallarına dolaylı olarak eklenen özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
compatible_with |
Etiket listesi;
yapılandırılabilir değildir; varsayılan: Varsayılan desteklenen ortamların yanı sıra, bu hedefin oluşturulabileceği ortamların listesi. Bu, kullanıcıların hangi hedeflerin birbirine bağlı olup olamayacağını bildirmesine olanak tanıyan Bazel kısıtlama sisteminin bir parçasıdır. Örneğin, harici olarak dağıtılabilir ikili programlar, şirket gizli koduna sahip kitaplıklara dayalı olmamalıdır. Ayrıntılar için ConstraintSemantics'e bakın. |
deprecation |
Dize; yapılandırılabilir değildir; varsayılan değer: Bu hedefle ilişkili bir açıklayıcı uyarı mesajı. Genellikle bu, kullanıcılara bir hedefin geçerliliğini yitirdiğini veya yerini başka bir kuralla değiştirdiğini, bir pakete özel olduğunu ya da herhangi bir nedenle zararlı olarak değerlendirildiğini kullanıcılara bildirmek için kullanılır. Mesajdan kaçınmak için hangi değişikliklerin yapılması gerektiğini kolayca bulabilmesi amacıyla bazı referanslar (web sayfası, hata numarası veya örnek taşıma CL'leri gibi) eklemek iyi bir fikirdir. Yerine düşürme olarak kullanılabilecek yeni bir hedef varsa eski hedefin tüm kullanıcılarını taşımak iyi bir fikirdir.
Bu özelliğin derleme şekli üzerinde herhangi bir etkisi yoktur ancak derleme aracının teşhis çıktısını etkileyebilir. Derleme aracı, Paket içi bağımlılıklar bu uyarıdan muaftır. Bu nedenle, örneğin, kullanımdan kaldırılan bir kuralın testlerini oluştururken uyarıyla karşılaşılmaz. Kullanımdan kaldırılan bir hedef, desteği sonlandırılmış başka bir hedefe bağlıysa uyarı mesajı gönderilmez. Kullanıcılar uygulamayı kullanmayı bıraktıktan sonra hedef kaldırılabilir. |
distribs |
Dize listesi; yapılandırılabilir değildir; varsayılan: Bu hedef için kullanılacak dağıtım yöntemi dizelerinin listesi. Bu, Bazel'ın artık kullanmadığı, kullanımdan kaldırılmış lisanslama API'sinin bir parçasıdır. Bunu kullanmayın. |
exec_compatible_with |
Etiket listesi;
yapılandırılabilir değildir; varsayılan:
Bu hedef için yürütme platformunda bulunması gereken |
exec_properties |
Dize sözlüğü; varsayılan değer: Bu hedef için seçilen bir platformun Hem platformda hem de hedef düzeyindeki mülklerde bir anahtar varsa 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. Bir özelliğin anlamı kuralın kendisine bağlıdır. Bu |
restricted_to |
Etiket listesi;
yapılandırılabilir değildir; varsayılan: Varsayılan olarak desteklenen ortamlar yerine bu hedefin oluşturulabileceği ortamların listesi.
Bu, Bazel kısıtlama sisteminin bir parçasıdır. Ayrıntılar için |
tags |
Dize listesi; yapılandırılabilir değildir; varsayılan:
Etiketler herhangi bir kuralda kullanılabilir. Test üzerindeki etiketler ve
Bazel, herhangi bir testin veya
Testlerdeki etiketler genellikle testin hata ayıklama ve yayınlama sürecinizdeki rolünü açıklamak için kullanılır. Etiketler genellikle en çok, çalışma zamanı ek açıklaması yapma özelliğine sahip olmayan C++ ve Python testlerinde yararlıdır. Etiket ve boyut öğelerinin kullanılması, test paketlerini kod tabanı check-in politikasına göre derlerken esneklik sağlar.
Bazel, test kuralının
|
target_compatible_with |
Etiket listesi; varsayılan değer:
Bu hedefin uyumlu olarak kabul edilmesi için hedef platformda bulunması gereken Geçişli olarak uyumsuz hedeflere bağımlı olan hedeflerin kendileri uyumsuz olarak kabul edilir. Ayrıca derleme ve test için atlanırlar. Boş bir liste (varsayılan değerdir), hedefin tüm platformlarla uyumlu olduğunu gösterir.
Çalışma Alanı Kuralları dışındaki tüm kurallar bu özelliği destekler.
Bazı kurallarda bu özelliğin herhangi bir etkisi yoktur. Örneğin,
Uyumsuz hedef atlama hakkında daha fazla bilgi için Platformlar sayfasına bakın. |
testonly |
Boole; yapılandırılabilir değildir; test ve test paketi hedefleri hariç varsayılan değer
Diğer bir deyişle,
Testler ( Bu özelliğin amacı, hedefin üretime yayınlanan ikili programlarda yer almaması gerektiği anlamına gelir. Testonly derleme zamanında zorunlu kılındığı ve bağımlılık ağacı üzerinden sanal olarak yayıldığı için makul bir şekilde uygulanmalıdır. Örneğin, birim testleri için yararlı olan saplamalar ve sahteler, üretime yayınlanacak aynı ikili programları içeren entegrasyon testlerinde de yararlı olabilir ve bu nedenle muhtemelen yalnızca test olarak işaretlenmemelidir. Öte yandan, normal davranışı koşulsuz olarak geçersiz kıldığı için belki bağlantı verilmesi bile tehlikeli olan kurallar kesinlikle test salt test olarak işaretlenmelidir. |
toolchains |
Etiket listesi;
yapılandırılabilir değildir; varsayılan:
Bu hedefin erişmesine izin verilen Değişkenleri oluşturma izni
olan hedefler grubu. Bu hedefler,
Bunun, platforma bağlı yapılandırma için kural uygulamaları tarafından kullanılan araç zinciri çözünürlüğü kavramından farklı olduğunu unutmayın. Bir hedefin hangi |
visibility |
Etiket listesi; yapılandırılabilir değildir; varsayılan değer, belirtilirse paketten
Bir hedefteki |
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 |
Dize listesi; $(location) ve "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçleştirme'ye tabidir; varsayılan değer
Bu bağımsız değişkenler, |
||||||||||||||||||||
env |
Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine tabidir; varsayılan değer
Test
Bu özellik yalnızca |
||||||||||||||||||||
env_inherit |
Dize listesi; varsayılan: Test
Bu özellik yalnızca |
||||||||||||||||||||
size |
Dize Test hedefinin "ağırlığını", yani çalışması için ne kadar süre/kaynak gerektiğini belirtir. Birim testleri "küçük", entegrasyon testleri "orta" ve uçtan uca testler "büyük" veya "çok büyük" olarak kabul edilir. Bazel, Test boyutları, aşağıdaki varsayılan zaman aşımlarına ve varsayılan en yüksek yerel kaynak kullanımlarına karşılık gelir:
|
||||||||||||||||||||
timeout |
Dize Geri dönmeden önce testin ne kadar sürmesinin beklendiği.
Bir testin boyut özelliği kaynak tahminini kontrol etse de 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ı
Yukarıdakilerin dışındaki zamanlarda test zaman aşımı
|
||||||||||||||||||||
flaky |
Boole; yapılandırılabilir değildir; varsayılan Testi güvenilir değil olarak işaretler. Ayarlanırsa testi en fazla üç kez yürütür ve yalnızca her seferinde başarısız olursa başarısız olarak işaretlenir. Varsayılan olarak bu özellik Yanlış değerine ayarlanır ve test yalnızca bir kez yürütülür. Bu özelliğin kullanılması genellikle önerilmez. Onayları onaylandığında testler güvenilir bir şekilde geçmelidir. |
||||||||||||||||||||
shard_count |
Negatif olmayan tam sayı 50'den küçük veya 50'ye eşit; varsayılan: Testi çalıştırmak için kullanılacak paralel kırık sayısını belirtir. Ayarlanırsa bu değer, testin çalıştırılacağı paralel parça sayısını belirlemek için kullanılan tüm buluşsal yöntemleri geçersiz kılar. Bazı test kurallarında, ilk olarak parçalamayı etkinleştirmek için bu parametrenin gerekli olabileceğini unutmayın. Ayrıca Parçalama testi etkinleştirilirse test oluşturulurken Parçalama, test çalıştırıcının test parçalama protokolünü desteklemesini gerektirir. Eşleşmiyorsa büyük olasılıkla her bir parçada her test çalıştırılacaktır. İstediğiniz şey bu değildir. Parçalama ile ilgili ayrıntılar için Test Ansiklopedisi'nde Parçalama Testi bölümüne bakın. |
||||||||||||||||||||
local |
Boole; yapılandırılabilir değildir; varsayılan Testi, korumalı alan olmadan yerel olarak çalıştırılmaya zorlar. Bunu Doğru değerine ayarlamak, etiket ( |
Tüm ikili kurallarda ortak özellikler (*_binary)
Bu bölümde, tüm ikili program kurallarında ortak olan özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
args |
Dize listesi; $(location) ve "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçleştirmesine tabidir; yapılandırılabilir değildir; varsayılan olarak
NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, ikili dosyayı |
env |
Dize sözlüğü; değerler $(location) ve "Değişken yap" değişikliğine tabidir; varsayılan değer Hedef
Bu özellik yalnızca
NOT: Hedefi Bazel dışında çalıştırdığınızda (örneğin, ikili dosyayı |
output_licenses |
Dize listesi; varsayılan: Bu ikili programın oluşturduğu çıkış dosyalarının lisansları. Bu, Bazel'ın artık kullanmadığı, kullanımdan kaldırılmış lisanslama API'sinin bir parçasıdır. Bunu kullanmayın. |
Yapılandırılabilir özellikler
Çoğu özellik "yapılandırılabilir"dir. Diğer bir deyişle, hedef farklı şekilde oluşturulduğunda özellik değerleri değişebilir. Özellikle, yapılandırılabilir özellikler, Bazel komut satırına iletilen işaretlere veya hedefi hangi aşağı akış bağımlılığının istediğine bağlı olarak değişiklik gösterebilir. Bu, örneğin, hedefi birden fazla platform veya derleme modu için ö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
ile değiştirilirse 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, hedef yapılandırmasının karşıladığı config_setting
veya constraint_value
kriterlerine bağlı olarak yapılandırılabilir bir özellik için farklı alternatif değerler arasından seçim yapar.
Bazel, yapılandırılabilir özellikleri makroları işledikten sonra ve kuralları işlemeden önce değerlendirir (teknik olarak
yükleme ve analiz aşamaları arasında).
select()
değerlendirmesinden önceki işlemler, select()
tarafından hangi dalın seçildiğini bilemez. Örneğin, makrolar, seçilen dala göre davranışlarını değiştiremez ve bazel query
, bir hedefin yapılandırılabilir bağımlılıkları hakkında yalnızca konservatif tahminlerde bulunabilir. Kurallar ve makrolarla select()
kullanımı hakkında daha fazla bilgi için
bu SSS sayfasını inceleyin.
Dokümanlarında nonconfigurable
olarak işaretlenmiş özellikler bu özelliği kullanamaz. Bir select()
öğesinin nasıl çözümleneceğini belirlemeden önce Bazel'ın kendi değerini bilmesi gerektiğinden, özellikler genellikle yapılandırılamaz.
Ayrıntılı genel bakış için Yapılandırılabilir Derleme Özellikleri'ne bakın.
Örtülü çıkış hedefleri
C++'taki dolaylı çıkışlar kullanımdan kaldırılmıştır. Mümkün olduğunda lütfen bunu başka dillerde kullanmaktan kaçının. Henüz bir kullanımdan kaldırma sürecimiz yok ancak bunlar da bir süre sonra kullanımdan kaldırılacak.
DERLEME dosyasında bir derleme kuralı tanımladığınızda paket içinde, yeni ve adlandırılmış bir kural hedefini açıkça bildirmiş olursunuz. Birçok derleme kuralı işlevi, içeriği ve anlamı kurala özgü olan bir veya daha fazla çıkış dosyası hedefini dolaylı olarak da içerir.
Örneğin, bir java_binary(name='foo', ...)
kuralını açık bir şekilde bildirdiğinizde foo_deploy.jar
çıkış dosyası hedefini aynı paketin üyesi olarak dolaylı olarak bildirmiş olursunuz.
(Bu özel hedef, dağıtım için uygun olan bağımsız bir Java arşividir.)
Örtülü çıkış hedefleri, küresel hedef grafiğinin birinci sınıf üyeleridir. Diğer hedeflerde olduğu gibi, üst düzeydeki oluşturulmuş komutta belirtildiklerinde veya diğer derleme hedefleri için gerekli ön koşullar olduklarında isteğe bağlı olarak oluşturulurlar. Bunlar, BUILD dosyalarında bağımlılık olarak referans gösterilebilir ve bazel query
gibi analiz araçlarının çıktısında gözlemlenebilir.
Her derleme kuralı türü için kuralın dokümanlarında, bu tür bir kural bildiriminin gerektirdiği örtülü çıkışların adlarını ve içeriklerini ayrıntılı şekilde veren özel bir bölüm bulunur.
Derleme sistemi tarafından kullanılan iki ad alanı arasındaki önemli ancak küçük bir fark vardır: Etiketler, kural veya dosya olabilecek hedefleri tanımlar. Dosya hedefleri, kaynak (veya giriş) dosyası hedeflerine ve türetilmiş (veya çıkış) dosya hedeflerine bölünebilir. DERLEME dosyalarında bahsedebilir, komut satırından derleme yapabilir veya bazel query
kullanarak bunları inceleyebilirsiniz. Bu hedef ad alanıdır. Her dosya hedefi, diskteki bir gerçek 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 hedefe sahip olmayan dosyalar olabilir. Örneğin, C++ derlemesi sırasında üretilen .o
nesne dosyalarına BUILD dosyaları içinden veya komut satırından referans verilemez.
Böylece derleme aracı, işini nasıl yaptığına dair belirli uygulama ayrıntılarını gizleyebilir. Bu, BUILD Concept Reference (Kavram Referansı) bölümünde daha ayrıntılı bir şekilde açıklanmıştır.