Çalışma alanları, paketler ve hedefler

Bazel, çalışma alanı adı verilen bir dizin ağacında düzenlenmiş kaynak koddan yazılım oluşturuyor. Çalışma alanındaki kaynak dosyalar, iç içe yerleştirilmiş bir paket hiyerarşisinde düzenlenir. Bu hiyerarşide her paket bir ilgili kaynak dosyaları kümesi ile bir BUILD dosyası içeren bir dizindir. BUILD dosyası, kaynaktan hangi yazılım çıkışlarının oluşturulabileceğini belirtir.

Çalışma alanı

Çalışma alanı, dosya sisteminizde oluşturmak istediğiniz yazılımın kaynak dosyalarını içeren bir dizin ağacıdır. Her çalışma alanındaWORKSPACE Bu, boş olabilir veya harici bağımlılıklar gerekir.

WORKSPACE adlı bir dosya içeren dizinler, çalışma alanı kökü olarak değerlendirilir. Bu nedenle Bazel, başka bir çalışma alanı oluştururken WORKSPACE dosyası içeren bir alt dizinde rootlanmış bir çalışma alanındaki dizin ağaçlarını yok sayar.

Bazel, WORKSPACE.bazel dosyasını WORKSPACE dosyasının takma adı olarak da destekliyor. Her iki dosya da varsa WORKSPACE.bazel kullanılır.

Depolar

Kod, depolar içinde düzenlenir. WORKSPACE dosyasını içeren dizin, @ olarak da adlandırılan ana deponun köküdür. Diğer (harici) depolar, WORKSPACE dosyasında çalışma alanı kuralları kullanılarak tanımlanır.

Bazel ile birlikte sunulan çalışma alanı kuralları, Build Encyclopedia (Encyclopedia) derlemesinin Çalışma Alanı Kuralları bölümünde ve yerleştirilmiş Starlark deposuyla ilgili belgelerde belgelenmiştir kurallar.

Harici depolar depo olduklarında genellikle bir WORKSPACE dosyası da içerir. Ancak bu ek WORKSPACE dosyaları Bazel tarafından yok sayılır. Özellikle, geçişli olarak kullanılan depolar otomatik olarak eklenmez.

Paketler

Depodaki kod düzenlemesinin birincil birimi pakettir. Paket, ilgili dosyaların koleksiyonudur ve çıkış yapıları oluşturmak için bunların nasıl kullanılacağını belirtir.

Paket, BUILD (veya BUILD.bazel) adlı bir dosya içeren bir dizin olarak tanımlanır. Bir paket, dizinindeki tüm dosyaları ve birlikte BUILD dosyası içerenler dışındaki tüm alt dizinleri içerir. Bu tanımdan sonra, hiçbir dosya veya dizin iki farklı paketin bir parçası olamaz.

Örneğin, aşağıdaki dizin ağacında iki paket vardır: my/app ve my/app/tests alt paketi. my/app/data bir paket değil, my/app paketine ait bir dizindir.

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ında tanımlanan hedefler kapsayıcısıdır. Çoğu hedef, iki ana dosya türünden biridir: dosyalar ve kurallar.

Dosyalar da iki türe ayrılır. Kaynak dosyalar genellikle insanların çabaları tarafından yazılır ve depoya kaydedilir. Türetilmiş dosyalar veya çıkış dosyaları olarak da adlandırılan oluşturulan dosyalar check-in yapmaz, ancak kaynak dosyalardan oluşturulur.

İkinci hedef türü, kural ile belirtilir. Her kural örneği, bir giriş kümesi ile çıkış dosyası kümesi arasındaki ilişkiyi belirtir. Bir kurala yapılan girişler kaynak dosyalar olabilir, ancak diğer kuralların çıktıları da olabilirler.

Kural girdisinin kaynak dosya mı yoksa oluşturulmuş dosya mı olduğu çoğu durumda önemsizdir. önemli olan, yalnızca söz konusu dosyanın içeriğidir. Bu gerçek, karmaşık bir kaynak dosyanın bir kural tarafından oluşturulan dosyayla değiştirilmesini kolaylaştırır. Örneğin, yüksek düzeyde yapılandırılmış bir dosyayı manuel olarak yönetmenin yükü çok yorucu olduğunda ve bir kullanıcı, elde ederiz. Söz konusu dosyanın tüketicileri için değişiklik yapılması gerekmez. Buna karşılık, oluşturulan bir dosya, yalnızca yerel değişikliklerle bir kaynak dosyayla kolayca değiştirilebilir.

Kural girişleri diğer kuralları da içerebilir. Bu tür ilişkilerin kesin anlamı genellikle çok karmaşık ve dille veya kurala bağlı olsa da sezgisel olarak basittir: C++ kitaplık kuralı A'nın giriş için başka bir C++ kitaplık kuralı B olabilir. Bu bağımlılığın etkisi, derleme sırasında B'nin başlık dosyalarının A'ya sunulması, bağlantı sırasında B'nin simgelerinin A'ya, B'nin çalışma zamanı verilerinin ise yürütme sırasında A'ya sunulmasıdır.

Tüm kurallardan bir eşiti, bir kural tarafından oluşturulan dosyaların her zaman kuralın kendisiyle aynı pakete ait olmasıdır; başka bir pakete dosya oluşturulması mümkün değildir. Bununla birlikte, bir kural girişlerinin başka bir paketten gelmesi alışılmadık bir durum değildir.

Paket grupları, amacı belirli kuralların erişilebilirliğini sınırlamak olan paketlerdir. Paket grupları, package_group işleviyle tanımlanır. Üç özelliği vardır: içerdikleri paketlerin listesi, adları ve içerdikleri diğer paket grupları. Bunları referans almanın tek yolu, kuralların visibility özelliğinden veya package işlevinin default_visibility özelliğinden gelir; dosya oluşturmaz veya kullanmaz. Daha fazla bilgi için package_group belgelerine bakın.

Etiketler