Çalışma alanları, paketler ve hedefler

. Sorun bildirin Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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ı.

Etiketler