Çalışma alanları, paketler ve hedefler

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel, yazılımları bir Workspace adlı dizin ağacında düzenlenen kaynak koddan oluşturur. Çalışma alanındaki kaynak dosyalar, iç içe yerleştirilmiş bir paket hiyerarşisinde düzenlenir. Her paket, bir dizi ilgili kaynak dosya ve 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 bulunan ve derlemek istediğiniz yazılımın kaynak dosyalarını içeren bir dizin ağacıdır. Her çalışma alanında, WORKSPACE adlı bir metin dosyası bulunur. Bu dosya boş olabilir veya çıkışları oluşturmak için gereken harici bağımlılıklara referanslar içerebilir.

WORKSPACE adlı bir dosya içeren dizinler, bir çalışma alanının kökü olarak kabul edilir. Bu nedenle Bazel, WORKSPACE dosyası içeren bir alt dizinde rootlanmış bir çalışma alanındaki dizin ağaçlarını başka bir çalışma alanı oluşturduğundan yoksayar.

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

Kod depoları

Kod, repositories 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ı, Derleme Ansiklopedisi'ndeki Çalışma Alanı Kuralları bölümünde ve yerleşik Starlark depo kuralları ile ilgili belgelerde açıklanmıştır.

Harici depolar da depo olduğundan genellikle bir WORKSPACE dosyası da içerir. Ancak bu ek WORKSPACE dosyaları Bazel tarafından yoksayılır. Özellikle, geçişli şekilde bağımlı olan depolar otomatik olarak eklenmez.

Paketler

Bir depodaki kod organizasyonunun birincil birimi paket'tir. Paket, ilgili dosyalardan oluşan bir koleksiyondur ve bunların çıkış yapıları oluşturmak için nasıl kullanılabileceğine dair spesifikasyondur.

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

Ö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, my/app paketine ait bir dizin olduğunu unutmayın.

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 hedeflerin kapsayıcısıdır. Çoğu hedef, dosyalar ve kurallar olmak üzere iki ana türden biridir.

Dosyalar iki türe ayrılır. Kaynak dosyalar genellikle kullanıcılar tarafından yazılır ve depoya kaydedilir. Bazen türetilmiş dosyalar veya çıkış dosyaları olarak da adlandırılan oluşturulan dosyalar, kaynak dosyalardan oluşturulur ancak denetlenmezler.

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

Bir kurala girilen girişin kaynak dosya mı yoksa oluşturulmuş dosya mı olduğu çoğu durumda önemli değildir. Önemli olan yalnızca söz konusu dosyanın içeriğidir. Bu durum, karmaşık bir kaynak dosyanın, bir kural tarafından üretilen oluşturulmuş bir dosyayla değiştirilmesini kolaylaştırır. Örneğin, yüksek düzeyde yapılandırılmış bir dosyayı manuel olarak yönetme yükü çok yorucu hale geldiğinde ve biri bu dosyayı türetmek için bir program yazarsa. Bu dosyayı kullananların herhangi bir değişiklik yapması gerekmez. Buna karşılık, oluşturulan bir dosya, yalnızca yerel değişiklikler içeren bir kaynak dosyayla kolayca değiştirilebilir.

Bir kurala yapılan girişler, başka kuralları da içerebilir. Bu tür ilişkilerin tam anlamı genellikle oldukça karmaşıktır ve dile veya kurala bağlıdır ancak sezgisel olarak basittir: A C++ kitaplık kuralı, giriş için başka bir C++ kitaplık kuralı B'ye sahip olabilir. Bu bağımlılık, derleme sırasında A'nın B'nin başlık dosyalarını, bağlama sırasında B'nin simgelerini ve yürütme sırasında B'nin çalışma zamanı verilerini kullanabilmesini sağlar.

Tüm kuralların değişmeyen bir nedeni, bir kural tarafından oluşturulan dosyaların her zaman kuralın kendisiyle aynı pakete ait olmasıdır. Bu nedenle, başka bir pakette dosya oluşturulamaz. Bununla birlikte, bir kuralın girişlerinin başka bir paketten gelmesi normaldir.

Paket grupları, amacı belirli kuralların erişilebilirliğini sınırlamak olan paket kümeleridir. Paket grupları package_group işlevi tarafından tanımlanır. Bu grupların üç özelliği vardır: İçerdikleri paketlerin listesi, adları ve içerdikleri diğer paket grupları. Bu işlevlere referans vermenin tek yolu, kuralların visibility özelliği veya package işlevinin default_visibility özelliğidir. Bu işlevler dosya oluşturmaz veya tüketmez. Daha fazla bilgi için package_group belgelerini inceleyin.

Labels