Kod depoları, çalışma alanları, paketler ve hedefler

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

Bazel, yazılımları depo adı verilen dizin ağaçlarında düzenlenen kaynak koddan oluşturur. Çalışma alanı, tanımlanmış bir depo grubu içerir. Depolardaki kaynak dosyalar, iç içe yerleştirilmiş bir paket hiyerarşisinde düzenlenir. Her paket, bir dizi ilgili kaynak dosyası ve bir BUILD dosyası içeren bir dizindir. BUILD dosyası, kaynaktan hangi yazılım çıkışlarının oluşturulabileceğini belirtir.

Kod depoları

Bazel derlemesinde kullanılan kaynak dosyalar depolarda düzenlenir (genellikle depolar olarak kısaltılır). Depo, kökünde sınır işaretçisi dosyası bulunan bir dizin ağacıdır. Bu tür bir sınır işaretçisi dosyası MODULE.bazel, REPO.bazel veya eski bağlamlarda WORKSPACE ya da WORKSPACE.bazel olabilir.

Geçerli Bazel komutunun çalıştırıldığı depoya ana depo adı verilir. Diğer (harici) depolar repo kuralları ile tanımlanır. Daha fazla bilgi için harici bağımlılıklara genel bakış başlıklı makaleyi inceleyin.

Çalışma alanı

Çalışma alanı, aynı ana depoda çalıştırılan tüm Bazel komutlarının paylaştığı ortamdır. Ana deposu ve tanımlanan tüm harici depoların kümesini kapsar.

Geçmişte "depo" ve "çalışma alanı" kavramlarının karıştırıldığını unutmayın. "Çalışma alanı" terimi, genellikle ana depoyu ifade etmek için kullanılmış, hatta bazen "depo"nun eş anlamlısı olarak bile kullanılmıştır.

Paketler

Bir depodaki kod organizasyonunun birincil birimi pakettir. 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 BUILD dosyası içeren bir dizin olarak tanımlanır. Bir paket, kendi içinde BUILD dosyası bulunanlar hariç olmak üzere, dizinindeki tüm dosyaları ve alt dizinlerinin tamamını içerir. Bu tanımdan hareketle 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 ayrıca 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, kontrol edilmez ancak kaynak dosyalardan oluşturulur.

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

Bir kurala ait girişin kaynak dosya mı yoksa oluşturulan bir dosya mı olduğu çoğu durumda önemsizdir. Önemli olan o 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 yapılandırılmış bir dosyayı manuel olarak yönetme yükü çok yorucu hale gelir ve biri bu dosyayı türetmek için bir program yazar. Bu dosyayı kullananlar için herhangi bir değişiklik 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 kuralın girişleri diğer 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ığı kuralı, giriş için başka bir C++ kitaplığı kuralı B'ye sahip olabilir. Bu bağımlılık, derleme sırasında A'nın B'nin başlık dosyalarına, bağlantı oluşturma sırasında B'nin sembollerine ve yürütme sırasında B'nin çalışma zamanı verilerine erişebilmesini sağlar.

Tüm kuralların değişmez bir özelliği, bir kural tarafından oluşturulan dosyaların her zaman kuralın kendisiyle aynı pakete ait olmasıdır. Başka bir pakette dosya oluşturmak mümkün değildir. Bununla birlikte, bir kuralın girişlerinin başka bir paketten gelmesi yaygın bir durumdur.

Paket grupları, belirli kuralların erişilebilirliğini sınırlandırmak amacıyla oluşturulan paket kümeleridir. 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ı. 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 dokümanlarına bakın.

Etiketler