Çalışma alanları, paketler ve hedefler

Sorun bildirin Kaynağı göster

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

Workspace

Ç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 metin dosyası boş olabilir veya çıkışları oluşturmak için gereken harici bağımlılıklara referanslar içerebilir.

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

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

Depolar

Kod, depolarda 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 veya Bzlmod sistemindeki modül ve uzantılardan oluşturulur. Daha fazla bilgi için dış bağımlılıklara genel bakış bölümüne bakın.

Bazel ile paket halinde sunulan çalışma alanı kuralları, Derleme Ensiklopedisi'ndeki Çalışma Alanı Kuralları bölümünde ve yerleştirilmiş Starlark deposu kuralları ile ilgili dokümanlarda belgelenmiştir.

Harici depolar doğrudan depo olduğu için genellikle bir WORKSPACE dosyası da içerirler. Ancak bu ek WORKSPACE dosyaları Bazel tarafından yok sayılır. Özellikle, geçişli şekilde bağımlı olan depolar otomatik olarak eklenmez.

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 dosya içeren bir dizin olarak tanımlanır. Paket, dizinindeki tüm dosyaları ve altındaki tüm alt dizinleri (BUILD dosyası içerenler hariç) içerir. Bu tanıma göre hiçbir dosya veya dizin, iki farklı paketin parçası olamaz.

Örneğin, aşağıdaki dizin ağacında my/app adlı iki paket ve my/app/tests alt paketi bulunur. 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 insanların çalışmaları tarafından yazılır ve depoya giriş yapar. 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 belirtilir. Her kural örneği, bir giriş kümesi ile çıkış dosyaları kümesi 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 geldiğinde ve biri bu dosyayı türetmek için bir program yazarsa. Söz konusu dosyanın tüketicilerinin herhangi bir değişiklik yapmasına gerek yoktur. Öte yandan, 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: Bir C++ kitaplık kuralı A, girdi için başka bir C++ kitaplık kuralı B'ye sahip olabilir. Bu bağımlılığın etkisi, B'nin başlık dosyalarının derleme sırasında A tarafından, B'nin simgelerinin bağlantı sırasında A tarafından kullanılabilmesi ve B'nin çalışma zamanı verilerinin yürütme sırasında A tarafından kullanılabilmesidir.

Tüm kuralların değişmeyen bir yönü, 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. Yine de bir kuralın girişlerinin başka bir paketten gelmesi nadir bir durum değildir.

Paket grupları, belirli kuralların erişilebilirliğini sınırlamak olan 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ı. Bunlara referansta bulunmak için izin verilen tek yol, kuralların visibility özelliği veya package işlevinin default_visibility özelliğidir; dosya oluşturmaz veya kullanmaz. Daha fazla bilgi için package_group belgelerine göz atın.

Etiketler