Bazel, dizin ağacında düzenlenmiş kaynak kodundan yazılım oluşturur.
çalışma alanıdır. Çalışma alanındaki kaynak dosyalar iç içe yerleştirilmiş şekilde düzenlenir
paket hiyerarşisi: Bu örnekte her paket,
bir BUILD
dosyası içerir. BUILD
dosyası,
yazılım çıkışları ise kaynaktan derlenebilir.
Çalışma alanı
Çalışma alanı, dosya sisteminizde bulunan ve
dosyaları oluşturun. Her çalışma alanının
WORKSPACE
boş olabilir veya
gereken dış bağımlılıkları belirler.
WORKSPACE
adında bir dosyayı içeren dizinler,
çalışmayacaktır. Bu nedenle, Bazel rootlanmış bir çalışma alanındaki dizin ağaçlarını yoksayar
WORKSPACE
dosyası içeren bir alt dizinde yeniden oluşturulur.
Bazel, WORKSPACE.bazel
dosyasını WORKSPACE
dosyasının takma adı olarak da destekler.
Her iki dosya da mevcutsa WORKSPACE.bazel
kullanılır.
Kod depoları
Kod, depolarda düzenlenir. WORKSPACE
içeren dizin
dosyası, @
olarak da adlandırılan ana deponun köküdür. Diğer, (harici)
depoları, çalışma alanı kuralları kullanılarak WORKSPACE
dosyasında tanımlanır.
Bazel ile bir araya getirilen çalışma alanı kuralları, Workspace Kuralları bölümünden Ansiklopedi'yi oluşturun ve şuradaki dokümanları inceleyin: yerleştirilmiş Starlark deposu kurallarını kullanıma sunuyoruz.
Harici depolar kod depoları olduğundan, genellikle bir
WORKSPACE
dosyası da oluşturulur. Ancak, bu ek WORKSPACE
dosyaları
Bazel tarafından yoksayıldı. Geçişli olarak bağımlı olan depolar özellikle
otomatik olarak eklenmez.
Paketler
Bir depodaki kod organizasyonunun birincil birimi pakettir. CEVAP paketi, ilgili dosyalardan oluşan bir koleksiyondur ve bu dosyaların çıktı yapıları üretmek için kullanılabilir.
Paket, BUILD
adlı dosyayı içeren bir dizin olarak tanımlanır
(veya BUILD.bazel
). Paket, dizinindeki tüm dosyaları içerir ve
altındaki tüm alt dizinler (kendisi bir
BUILD
dosyası yükleyin. Bu tanıma göre hiçbir dosya veya dizin
iki paket vardır.
Örneğin, aşağıdaki dizin ağacında
my/app
ve my/app/tests
alt paketi olmak üzere iki paket vardır.
my/app/data
değerinin bir paket değil, bir dizin olduğunu unutmayın
my/app
paketine ait.
src/my/app/BUILD
src/my/app/app.cc
src/my/app/data/input.txt
src/my/app/tests/BUILD
src/my/app/tests/test.cc
Hedefler
Paket, paketin
BUILD
dosyası. Çoğu hedef, dosyalar ve kurallar olmak üzere iki ana türden biridir.
Dosyalar iki türe ayrılır. Kaynak dosyalar genellikle çalışmalarla yazıldı ve depoya giriş yapıldı. Oluşturulan dosyalar (bazen türetilmiş dosyalar veya çıkış dosyaları olarak da adlandırılır) giriş yapılmaz, ancak kaynak dosyalardan oluşturulur.
İkinci hedef türü, bir kural ile belirtilir. Her kural örnek, bir girdi kümesi ile bir veri kümesi arasındaki ilişkiyi çıkış dosyası olarak da kullanabilirsiniz. Bir kurala yapılan girişler kaynak dosyalar olabilir, ancak diğer kuralların çıktıları olabilir.
Bir kural girişinin kaynak dosya mı yoksa oluşturulmuş bir dosya mı olduğu çoğu durumda önemsizdir; önemli olan yalnızca içeriği dosyası olarak kaydedebilirsiniz. Bu durum, karmaşık bir kaynak dosyayı kolayca bir kural tarafından üretilen, örneğin yükün bir dosyayı manuel olarak yönetmenin bir yolu da ve biri bunu türetmek için bir program yazar. Değişiklik yok söz konusu dosyanın tüketicilerine yönelik daha fazla işlem sunar. Öte yandan, oluşturulmuş bir kaynak dosya, yalnızca yerel dosya tabanlı bir kaynak dosyayla kolayca anlamına gelir.
Bir kurala yapılan girişler, başka kuralları da içerebilir. İlgili içeriği oluşturmak için kullanılan ve bu tür ilişkilerin tam anlamıyla anlamı genellikle oldukça karmaşıktır. dile veya kurala bağlı olsa da sezgisel olarak basittir: C++ kitaplık kuralı A'da giriş için başka bir C++ kitaplık kuralı B olabilir. Bu bağımlılığın etkisi, B'nin başlık dosyalarının B'nin sembolleri A tarafından kullanılabildiğinden, B'nin sembolleri sırasında B'nin çalışma zamanı verileri A'ya sunulurken birkaç adım var.
Tüm kuralların sabit bir durumu, bir kural tarafından oluşturulan dosyaların her zaman kuralın kendisiyle aynı pakete ait olmalıdır; değil başka bir pakette oluşturmanızı da sağlar. Sık karşılaşılan bir durum değil yine de bir kuralın girişlerinin başka bir paketten gelmesini sağlar.
Paket grupları, erişilebilirliği sınırlandırmayı amaçlayan paket kümeleridir
sağlayabilir. Paket grupları, package_group
işleviyle tanımlanır.
Üç özelliği vardır: içerdikleri paketlerin listesi, adları ve
diğer paket gruplarını da olabilir. Referans olarak kullanılması için izin verilen tek yöntem:
kuralların visibility
özelliğinden veya default_visibility
package
işlevinin özelliği; Dosya oluşturmaz veya kullanmazlar.
Daha fazla bilgi için
package_group
dokümanları.