Kurallar
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- cc_static_library
- cc_test
- cc_toolchain
- cc_toolchain_suite
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
cc_binary
Kural kaynağını görüntülecc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, dynamic_deps, env, exec_compatible_with, exec_properties, features, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, module_interfaces, nocopts, output_licenses, reexport_deps, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Yürütülebilir bir ikili program oluşturur.
Hedefin
name
değeri, hedefin adıyla aynı olmalıdır
uygulamanın ana giriş noktası olan (uzantı hariç) kaynak dosyasıdır.
Örneğin, giriş noktanız main.cc
ise adınız şu şekilde olmalıdır:
main
olmalıdır.
Dolaylı çıkış hedefleri
name.stripped
(yalnızca açıkça istendiğinde oluşturulur): Sadeleştirilmiş sürümü de vardır.strip -g
, hata ayıklamayı kaldırmak için ikili programda çalıştırılıyor anlamına gelir. Komut satırında ek şerit seçenekleri--stripopt=-foo
name.dwp
(yalnızca açıkça istendiğinde oluşturulur): Eğer Fission etkin: hata ayıklama Uzaktan dağıtılan ikili programlarda hata ayıklamaya uygun bilgi paketi dosyası. Diğer: anlamına gelir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer Bu URL'ler |
srcs
|
Etiket listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) ön işleme tabi tutulmaz ve genellikle anlatacağım. Önceden işlenmiş derleme dosyaları (.S) önceden işlenir ve genellikle kullanarak derleyiciyi detaylandırırsınız.
İzin verilen
... ve bu dosyaları oluşturan kurallar (ör. |
data
|
Etiket listesi; varsayılan değer data ile ilgili genel yorumları göster
tarafından tanımlanan tipik
çoğu derleme kuralına bakın.
Oluşturulan bir dosyanın adı
C++ kodunuz şu şekilde veri dosyalarına erişebilir:
|
additional_linker_inputs
|
Etiket listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır. |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, belirtilen sırayla
Pakette özellik belirtilmişse
|
defines
|
Dize listesi; varsayılan değer -D eklenir ve bu hedefe yönelik derleme komut satırına eklenir,
kurala bağlı olarak değişiklik gösterir. Bu tür sorunlarda neden olabileceği için
etkileridir. Şüpheye düştüğünüzde,
Bunun yerine local_defines .
|
dynamic_deps
|
Etiket listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
hdrs_check
|
String; varsayılan değer |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry
Bu, yalnızca
Google'ın #include ifadeleri yazma stiline uymaz.
COPTS'nin aksine, bu işaretler bu kural için eklenir
ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.)
geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde
"-I" COPTS olarak işaretler.
Eklenen |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili programları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
linkshared
|
Boole; varsayılan değer linkshared=True özelliğini ekleyin. Varsayılan olarak
bu seçenek kapalıdır.
Bu işaretin varlığı, bağlantı işleminin
Hem |
linkstatic
|
Boole; varsayılan değer cc_binary ve
cc_test : İkili dosyayı statik
yatırım yapmanız önemlidir. cc_library.link_static için: Aşağıya bakın.
Bu seçenek
Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına
Mümkün olduğunda kullanıcı kitaplıkları için Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dize listesi; varsayılan değer -D eklenir ve bu hedef için derleme komut satırına eklenir,
ancak muhteliflerine değil.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili programları |
module_interfaces
|
Etiket listesi; varsayılan değer C++ Standard'da modül arayüzü dosya uzantısıyla ilgili herhangi bir kısıtlama yoktur
Kullanım bayrak ile korunuyor
|
nocopts
|
String; varsayılan değer COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil)
bu kuralı derlemek amacıyla COPTS öğesinden kaldırılacak.
Bu özelliğe gerek olmamalı veya özellik kullanılmamalıdır
third_party dışında. Değerlerin ön işlemesi yapılmaz
"Marka" dışında hiçbir şekilde değişken yerine
|
reexport_deps
|
Etiket listesi; varsayılan değer |
stamp
|
Tam sayı; varsayılan değer
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın. |
cc_import
Kural kaynağını görüntülecc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, interface_library, linkopts, objects, pic_objects, pic_static_library, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, toolchains, visibility)
cc_import
kuralları, kullanıcıların önceden derlenmiş C/C++ kitaplıklarını içe aktarmasına olanak tanır.
Tipik kullanım alanları şunlardır:
1. Statik kitaplık bağlama
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
static_library = "libmylib.a",
# If alwayslink is turned on,
# libmylib.a will be forcely linked into any binary that depends on it.
# alwayslink = 1,
)
.
2. Paylaşılan bir kitaplığı bağlama (Unix)
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
shared_library = "libmylib.so",
)
.
3. Paylaşılan bir kitaplığı arayüz kitaplığıyla bağlama
Unix'te:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
# libmylib.ifso is an interface library for libmylib.so which will be passed to linker
interface_library = "libmylib.ifso",
# libmylib.so will be available for runtime
shared_library = "libmylib.so",
)
.
Windows'da:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
# mylib.lib is an import library for mylib.dll which will be passed to linker
interface_library = "mylib.lib",
# mylib.dll will be available for runtime
shared_library = "mylib.dll",
)
.
5. Paylaşılan bir kitaplık system_provided=True
ile bağlanıyor
Unix'te:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
interface_library = "libmylib.ifso", # Or we can also use libmylib.so as its own interface library
# libmylib.so is provided by system environment, for example it can be found in LD_LIBRARY_PATH.
# This indicates that Bazel is not responsible for making libmylib.so available.
system_provided = 1,
)
.
Windows'da:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
# mylib.lib is an import library for mylib.dll which will be passed to linker
interface_library = "mylib.lib",
# mylib.dll is provided by system environment, for example it can be found in PATH.
# This indicates that Bazel is not responsible for making mylib.dll available.
system_provided = 1,
)
.
5.c Statik veya paylaşılan kitaplığa bağlama
Unix'te:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
static_library = "libmylib.a",
shared_library = "libmylib.so",
)
.
Windows'da:
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
static_library = "libmylib.lib", # A normal static library
interface_library = "mylib.lib", # An import library for mylib.dll
shared_library = "mylib.dll",
)
.
Kalan değer, Unix ve Windows'da aynıdır:
# first will link to libmylib.a (or libmylib.lib)
cc_binary(
name = "first",
srcs = ["first.cc"],
deps = [":mylib"],
linkstatic = 1, # default value
)
# second will link to libmylib.so (or libmylib.lib)
cc_binary(
name = "second",
srcs = ["second.cc"],
deps = [":mylib"],
linkstatic = 0,
)
.
cc_import
, "dahil etme" özelliğini destekler. Örnek:
cc_import(
name = "curl_lib",
hdrs = glob(["vendor/curl/include/curl/*.h"]),
includes = ["vendor/curl/include"],
shared_library = "vendor/curl/lib/.libs/libcurl.dylib",
)
.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer deps ile ilgili genel yorumları göster
tarafından tanımlanan tipik
çoğu derleme kuralına bakın.
|
hdrs
|
Etiket listesi; varsayılan değer |
alwayslink
|
Boole; varsayılan değer Windows'da her zamanlink özelliği 2017 sürümüne göre çalışmıyorsa bunun nedeni bilinen bir sorun yoksa lütfen 2017 ile sürümünüzü en son sürüme yükseltin. |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry
Bu, yalnızca
Google'ın #include ifadeleri yazma stiline uymaz.
COPTS'nin aksine, bu işaretler bu kural için eklenir
ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.)
geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde
"-I" COPTS olarak işaretler.
Varsayılan |
interface_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
objects
|
Etiket listesi; varsayılan değer |
pic_objects
|
Etiket listesi; varsayılan değer |
pic_static_library
|
Etiket; varsayılan değer |
shared_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
static_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
system_provided
|
Boole; varsayılan değer interface_library belirtilmeli ve
shared_library boş olmalıdır.
|
cc_library
Kural kaynağını görüntülecc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, hdrs_check, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, module_interfaces, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
C++ tarafından derlenmiş kitaplıklar için cc_library()
kullanın.
Sonuç olarak bir .so
, .lo
,
veya .a
(ihtiyaca bağlı olarak).
Statik bağlantıyla bir öğe derlerseniz
bağımlı bir kitaplık kuralının çıktısı olan cc_library
.a
dosyasıdır. Örneğin
alwayslink=True
, .lo
dosyasını alırsınız.
Gerçek çıkış dosyasının adı şudur: libfoo.so
paylaşılan kitaplıktır (burada foo kuralın adıdır). İlgili içeriği oluşturmak için kullanılan
diğer kitaplık türleri .lo
ve .a
ile biter.
tıklayın. Belirli bir paylaşılan kitaplık adına ihtiyacınız varsa
Python modülü tanımlamak için genrule komutunu kullanarak kitaplığı kopyalayın
istediğiniz ada ekleyebilirsiniz.
Üstbilgi dahil etme kontrolü
Derlemede kullanılan tüm başlık dosyaları
cc_*
kuralından hdrs
veya srcs
.
Zorunlu kılınır.
cc_library
kuralları için hdrs
içindeki başlıklar,
kitaplığın herkese açık arayüzünden oluşturulur ve hem
hdrs
ve srcs
kitaplığındaki dosyalardan
ve hdrs
ve srcs
dosyalarındaki dosyalardan
kitaplığı deps
içinde listeleyen cc_*
kuralından.
srcs
içindeki başlıklar yalnızca dosyalardan doğrudan eklenmelidir
hdrs
ve srcs
kitaplığının kendisinde. Zaman
hdrs
veya srcs
içerisine başlık koymaya karar verdiğinizde,
bu kütüphanedeki tüketicilerin şu işlemleri yapmasına izin verip vermediğinizi:
dahil edebilirsiniz. Bu karar, yaklaşık olarak
Programlama dillerinde public
ile private
arasında görünürlük.
cc_binary
ve cc_test
kuralda dışa aktarılmış veri yok
arayüzü olduğundan hdrs
özelliğine de sahip değildirler. Tüm başlıklar
veya teste doğrudan ait olanlar
srcs
.
Bu kuralları görmek için aşağıdaki örneğe bakın.
cc_binary(
name = "foo",
srcs = [
"foo.cc",
"foo.h",
],
deps = [":bar"],
)
cc_library(
name = "bar",
srcs = [
"bar.cc",
"bar-impl.h",
],
hdrs = ["bar.h"],
deps = [":baz"],
)
cc_library(
name = "baz",
srcs = [
"baz.cc",
"baz-impl.h",
],
hdrs = ["baz.h"],
)
Bu örnekte izin verilen doğrudan dahil etmeler aşağıdaki tabloda listelenmiştir.
Örneğin, foo.cc
adlı uygulamanın doğrudan
foo.h
ve bar.h
içerir, ancak baz.h
içermez.
Dosya dahil | İzin verilen dahil etmeler |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
çubuk-impl.h | bar.h baz.h |
bar.cc | bar.h bar-impl.h baz.h |
baz.h | baz-impl.h |
baz-impl.h | baz.h |
baz.cc | baz.h baz-impl.h |
Dahil olma kontrolü kuralları yalnızca doğrudan reklamlar için geçerlidir
dahil edilir. Yukarıdaki örnekte foo.cc
için izin verilen:
dahil olmak üzere bar.h
, dahil olmak üzere baz.h
dönüşün baz-impl.h
içermesine izin verilir. Teknik olarak,
.cc
dosyası derlemesi, geçişli olarak herhangi bir başlığı içerebilir
hdrs
veya srcs
içinde
Geçişli deps
kapatmasındaki herhangi bir cc_library
. İçinde
bu durumda derleyici baz.h
ve baz-impl.h
verilerini okuyabilir
foo.cc
derlenirken, ancak foo.cc
şunu içermemelidir:
#include "baz.h"
içerir. Bunun için
izin verildi, deps
öğesine baz
eklenmelidir
/ foo
.
Bazel, dahil etme denetimi kurallarını uygulamak için araç zinciri desteğine bağlıdır.
layering_check
özelliğinin araç zinciri tarafından desteklenmesi gerekir
ve örneğin
--features=layering_check
komut satırı işareti veya
features
package
işlevini kullanın. Araç zincirleri
bu özelliği yalnızca Unix ve macOS'te clang ile destekler.
Örnekler
Bağlayıcıyı bağlamaya zorlamak için alwayslink
işaretini kullanırız.
bu kod, ana ikili kodda bu kodu belirtmez.
cc_library(
name = "ast_inspector_lib",
srcs = ["ast_inspector_lib.cc"],
hdrs = ["ast_inspector_lib.h"],
visibility = ["//visibility:public"],
deps = ["//third_party/llvm/llvm/tools/clang:frontend"],
# alwayslink as we want to be able to call things in this library at
# debug time, even if they aren't used anywhere in the code.
alwayslink = 1,
)
Aşağıdaki örnek, Yeşil Ofis
third_party/python2_4_3/BUILD
Kodlardan bazıları dl
kitaplığını kullanır (
başka bir dinamik kitaplıktır),
kuralı,-ldl
dl
kitaplığı.
cc_library(
name = "python2_4_3",
linkopts = [
"-ldl",
"-lutil",
],
deps = ["//third_party/expat"],
)
Aşağıdaki örnek, third_party/kde/BUILD
alanından geliyor.
Önceden oluşturulmuş .so
dosyalarını depoda tutuyoruz.
Üstbilgi dosyaları include
adlı bir alt dizinde bulunur.
cc_library(
name = "kde",
srcs = [
"lib/libDCOP.so",
"lib/libkdesu.so",
"lib/libkhtml.so",
"lib/libkparts.so",
...more .so files...,
],
includes = ["include"],
deps = ["//third_party/X11"],
)
Aşağıdaki örnek, third_party/gles/BUILD
alanından geliyor.
Üçüncü taraf kodu için genellikle defines
ve
linkopts
.
cc_library(
name = "gles",
srcs = [
"GLES/egl.h",
"GLES/gl.h",
"ddx.c",
"egl.c",
],
defines = [
"USE_FLOAT",
"__GL_FLOAT",
"__GL_COMMON",
],
linkopts = ["-ldl"], # uses dlopen(), dl library
deps = [
"es",
"//third_party/X11",
],
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer Bunlar,
Bunlar, C++ kitaplık kurallarının adları olmalıdır.
Bu kuralın kitaplığını bağlayan bir ikili program oluşturduğunuzda,
"Düşüncelere" rağmen adı, bu kitaplığın tüm istemcileri değil
buraya ait. Çalışma zamanı veri bağımlılıkları Önceden derlenmiş bir üçüncü taraf kitaplığına bağlantı oluşturmak için adını
Bunun yerine Bu kitaplığa bağlamadan bir şeye bağımlı olmak için
adını |
srcs
|
Etiket listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) ön işleme tabi tutulmaz ve genellikle anlatacağım. Önceden işlenmiş derleme dosyaları (.S) önceden işlenir ve genellikle kullanarak derleyiciyi detaylandırırsınız.
İzin verilen
... ve bu dosyaları oluşturan kurallar (ör. |
data
|
Etiket listesi; varsayılan değer data ile ilgili genel yorumları göster
tarafından tanımlanan tipik
çoğu derleme kuralına bakın.
Oluşturulan bir dosyanın adı
C++ kodunuz şu şekilde veri dosyalarına erişebilir:
|
hdrs
|
Etiket listesi; varsayılan değer Bu, şuna benzeyen başlık dosyalarını bildirmek için kesinlikle tercih edilen konumdur:
kitaplığın arayüzünü tarif eder. Bu başlıklar,
bu kurala kaynaklar tarafından veya bağımlı kurallara dahil edilebilir.
Bu kitaplığın bir istemcisi tarafından eklenmesi amaçlanmayan başlıklar
İzin verilen |
additional_compiler_inputs
|
Etiket listesi; varsayılan değer |
additional_linker_inputs
|
Etiket listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır. |
alwayslink
|
Boole; varsayılan değer srcs (bazıları ikili program tarafından başvurulan semboller içermese bile).
Bu, kodunuz yalnızca dil tercihinde kod tarafından
kodu alır. Örneğin, kodunuz bir geri çağırma işlemi almak için kaydedilir
bir hizmet tarafından sağlanır.
Windows'da her zamanlink özelliği 2017 sürümüne göre çalışmıyorsa bunun nedeni bilinen bir sorun yoksa lütfen 2017 ile sürümünüzü en son sürüme yükseltin. |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, belirtilen sırayla
Pakette özellik belirtilmişse
|
defines
|
Dize listesi; varsayılan değer -D eklenir ve bu hedefe yönelik derleme komut satırına eklenir,
kurala bağlı olarak değişiklik gösterir. Bu tür sorunlarda neden olabileceği için
etkileridir. Şüpheye düştüğünüzde,
Bunun yerine local_defines .
|
hdrs_check
|
String; varsayılan değer |
implementation_deps
|
Etiket listesi; varsayılan değer deps , üstbilgilerini içerir ve bu kitaplıkların (ve tüm
geçişli dep'ler) yalnızca bu kitaplığın derlenmesi için kullanılır,
ona güvenmeniz gerekir. implementation_deps ile belirtilen kitaplıklar hâlâ şurada bağlı:
ikili hedefleridir.
Kullanım şimdilik cc_libraries ile sınırlıdır ve bayrak ile korunur
|
include_prefix
|
String; varsayılan değer Ayarlandığında, bu kuralın
Bu özellik yalnızca |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry
Bu, yalnızca
Google'ın #include ifadeleri yazma stiline uymaz.
COPTS'nin aksine, bu işaretler bu kural için eklenir
ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.)
geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde
"-I" COPTS olarak işaretler.
Eklenen |
linkopts
|
Dize listesi; varsayılan değer cc_binary.linkopts başlıklı makaleyi inceleyin.
linkopts özelliği,
deps aracılığıyla doğrudan veya dolaylı olarak bu kitaplığa bağlıdır
özellikleri aracılığıyla (veya benzer şekilde ele alınan diğer özellikler aracılığıyla)
malloc
(cc_binary ) özelliğini gönderin. Bağımlılık
linkopt'ler, bağımlı linkopt'lere (ör. bağımlılık linkopt'lerine) göre önceliklidir
daha sonra komut satırında görünür). Linkopt'ler şurada belirtiliyor:
--linkopt
kurallı linkopt'lere göre önceliklidir.
Ayrıca, burada belirtilen "-Wl,-soname" ifadesinin veya "-Xlinker -soname" seçenekleri desteklenmez ve bu özellikte hiçbir zaman belirtilmemelidir. |
linkstamp
|
Etiket; varsayılan değer base paketi.
|
linkstatic
|
Boole; varsayılan değer cc_binary ve
cc_test : İkili dosyayı statik
yatırım yapmanız önemlidir. cc_library.link_static için: Aşağıya bakın.
Bu seçenek
Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına
Mümkün olduğunda kullanıcı kitaplıkları için Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dize listesi; varsayılan değer -D eklenir ve bu hedef için derleme komut satırına eklenir,
ancak muhteliflerine değil.
|
module_interfaces
|
Etiket listesi; varsayılan değer C++ Standard'da modül arayüzü dosya uzantısıyla ilgili herhangi bir kısıtlama yoktur
Kullanım bayrak ile korunuyor
|
strip_include_prefix
|
String; varsayılan değer Ayarlandığında, bu kuralın Göreli bir yolsa, pakete bağlı bir yol olarak alınır. Mutlak bir çözümse depoya bağlı bir yol olarak kabul edilir.
Bu özellik yalnızca |
textual_hdrs
|
Etiket listesi; varsayılan değer Bu, kendi başlarına derlanamayan üstbilgi dosyalarının bildirildiği konumdur; diğer kaynak dosyalara metin olarak eklenmeleri gerekir. girin. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın. |
cc_proto_library
Kural kaynağını görüntülecc_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
cc_proto_library
, .proto
dosyadan C++ kodu oluşturur.
deps
, proto_library
kuralına işaret etmelidir.
Örnek:
cc_library(
name = "lib",
deps = [":foo_cc_proto"],
)
cc_proto_library(
name = "foo_cc_proto",
deps = [":foo_proto"],
)
proto_library(
name = "foo_proto",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer proto_library listesi
kuralları belirlemeniz gerekir.
|
cc_shared_library
Kural kaynağını görüntülecc_shared_library(name, deps, additional_linker_inputs, compatible_with, deprecation, distribs, dynamic_deps, exec_compatible_with, exec_properties, experimental_disable_topo_sort_do_not_use_remove_before_7_0, exports_filter, features, restricted_to, roots, shared_lib_name, static_deps, tags, target_compatible_with, testonly, toolchains, user_link_flags, visibility, win_def_file)
Paylaşılan bir kitaplık oluşturulur.
Örnek
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
Örnekte foo_shared
, foo
öğesini statik olarak bağlar.
baz
ise geçişli bağımlılıktır. Gelmiyor
tarafından dinamik olarak sağlandığından bar
bağlantısını
bar_shared
dynamic_dep
.
foo_shared
, kontrol edilecek bağlayıcı komut dosyası *.lds dosyası kullanarak
simgeleri dışa aktarılmalıdır. cc_shared_library
kural mantığı şunları yapar:
hangi simgelerin dışa aktarılacağını kontrol etmez, yalnızca
iki paylaşılan kitaplık, dosyayı dışa aktarırsa analiz aşamasında hata vermek için dışa aktarılır
daha yüksek olacaktır.
cc_shared_library
ürününün her doğrudan bağımlılığının
dışa aktarıldı. Dolayısıyla Bazel, analiz sırasında foo
değerinin
foo_shared
tarafından dışa aktarıldı. baz
dosyasının dışa aktarılacağı varsayılmaz
foo_shared
tarafından. exports_filter
ile eşleşen her hedef
diğer verilerin de dışa aktarıldığı varsayılır.
Örnekteki her cc_library
en fazla bir yerde görünmelidir
cc_shared_library
. baz
bağlantısını da
bar_shared
ve daha fazla
tags = ["LINKABLE_MORE_THAN_ONCE"]
- baz
.
shared_lib_name
özelliği nedeniyle,
bar_shared
alanının adı bar.so
olacak
varsayılan olarak Linux'ta olan libbar.so
adına ekleyeceğiz.
Hatalar
Two shared libraries in dependencies export the same symbols.
Bu durum, iki farklı şekilde bir hedef oluşturduğunuzda,
Aynı hedefi dışa aktaran cc_shared_library
bağımlılık. Bunu düzeltmek için
kitaplıkların
cc_shared_library
bağımlılık.
Two shared libraries in dependencies link the same library statically
Bu durum, iki farklı değerde yeni bir cc_shared_library
oluşturduğunuzda gerçekleşir:
aynı hedefi statik olarak bağlayan farklı cc_shared_library
bağımlılıkları.
Dışa aktarmalardaki hataya benzer.
Bunu düzeltmenin bir yolu, kitaplığı
cc_shared_library
bağımlılık. Aynı zamanda, hâlâ ona bağlanan kullanıcı
bağlamayan kullanıcının görünürlüğü koruyabilmesi için kitaplığı dışa aktarması gerekir.
anlamına gelir. Diğer bir yöntem de hedefi dışa aktaran üçüncü bir kitaplık kullanmaktır.
Üçüncü bir yöntem de suçlu cc_library
öğesini LINKABLE_MORE_THAN_ONCE
ile etiketlemektir.
ancak bu düzeltme nadiren yapılır ve mutlaka
cc_library
bağlantısını birden çok kez güvenle bağlayabilirsiniz.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Bu, deps
cihazınızın geçişli olarak kapanışındaki bir kitaplığa erişilebildiği anlamına gelir
cc_shared_library
bağımlılıklarından birini yaşamadan ama hâlihazırda
dynamic_deps
içinde farklı bir cc_shared_library
ile bağlantılı ve
dışa aktarıldı.
Çözüm, dosyayı cc_shared_library
bağımlılığından dışa aktarmak veya dışa aktarmaktır.
dışa aktaran üçüncü bir cc_shared_library
.
Do not place libraries which only contain a precompiled dynamic library in deps.
Önceden derlenmiş bir dinamik kitaplığınız varsa buna gerek yoktur ve
şu anki cc_shared_library
hedefine statik olarak bağlı
oluşturun. Dolayısıyla, alan adının deps
cc_shared_library
. Önceden derlenmiş bu dinamik kitaplık
cc_libraries
için cc_library
doğrudan ekleyebilirsiniz.
Trying to export a library already exported by a different shared library
Mevcut kuralda bir dışa aktarmayı talep ediyorsanız bu hatayı dinamik bağımlılarınızdan biri tarafından dışa aktarılmakta olan bir hedef belirleyebilirsiniz.
Bunu düzeltmek için hedefi deps
öğesinden kaldırın ve dinamik
bağımlılığı veya exports_filter
öğesinin bu hedefi yakalamadığından emin olun.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer
Bu doğrudan sunumların geçişli kitaplık bağımlılıkları, bu paylaşılan
bir
Analiz sırasında kural uygulaması,
Uygulama, aynı kitaplık statik olarak bağlandığında da hataları tetikler.
birden fazla |
additional_linker_inputs
|
Etiket listesi; varsayılan değer user_link_flags özelliği ile yapabilirsiniz.
|
dynamic_deps
|
Etiket listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
experimental_disable_topo_sort_do_not_use_remove_before_7_0
|
Boole; varsayılan değer |
exports_filter
|
Dize listesi; varsayılan değer
Herhangi bir
Bu özelliğin aslında bu hedeflere bir bağımlılık ucu eklemediğini unutmayın.
bağımlılık kenarı bunun yerine Aşağıdaki söz dizimine izin verilir: foo/BUILD içindeki herhangi bir hedefi hesaba katmak için foo/BUILD veya diğer herhangi bir hedefi hesaba katmak için |
roots
|
Etiket listesi; varsayılan değer |
shared_lib_name
|
String; varsayılan değer |
static_deps
|
Dize listesi; varsayılan değer |
user_link_flags
|
Dize listesi; varsayılan değer .
|
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın. |
cc_static_library
Kural kaynağını görüntülecc_static_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)Bir hedefler listesinden ve bunların geçişli bağımlılıklarından statik bir kitaplık oluşturur.
Ortaya çıkan statik kitaplık,
deps
ve bunların geçişli bağımlılıkları,
PIC
nesne.
Çıkış grupları
linkdeps
Şu tabloda listelenen hedeflerin geçişli bağımlılıklarının etiketlerini içeren bir metin dosyası:
deps
(Statik kitaplığa nesne dosyası eklemeyen), ancak katkıda bulunanlar:
en az bir statik, dinamik veya arayüz kitaplığı sağlamalısınız. Elde edilen statik kitaplık
bağlantı sırasında bu kitaplıkların kullanılabilir olmasını gerektirebilir.
linkopts
Kullanıcılar tarafından sağlanan tüm geçişli öğelerin linkopts
öğesini içeren metin dosyası
deps
içinde listelenen hedeflerin bağımlılıklarını
Yinelenen simgeler
Varsayılan olarak cc_static_library
kuralı, oluşturulan statik
kitaplığında yinelenen simge yok. Aksi takdirde derleme bir hatayla başarısız oluyor
iletisinin bir kopyasını oluşturun.
Bu kontrol, ayar aracılığıyla hedef veya paket başına devre dışı bırakılabilir
features = ["-symbol_check"]
veya dünya genelinde
--features=-symbol_check
.
symbol_check
için araç zinciri desteği
Bazel ile gönderilen ve otomatik olarak yapılandırılmış C++ araç zincirleri,
symbol_check
özelliğini tüm platformlarda kullanabilirsiniz. Özel araç zincirleri,
iki yöntemden biriyle yapabilirsiniz:
ACTION_NAMES.validate_static_library
işlemini uygulamak vesymbol_check
özelliğiyle etkinleştiriyorum. İşlemdeki araç seti olmak üzere iki bağımsız değişkenle çağrılır: yinelenen sembolleri kontrol etmek için statik kitaplık ve yolu kontrol edilir.symbol_check
özelliğinin, işlemi, yinelenen simgeler için başarısız olacak şekilde oluşturmamanız gerekir.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer Herhangi bir nesne dosyası sağlamayan bağımlılıklar statik
ancak bunların etiketleri
|
cc_test
Kural kaynağını görüntülecc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, dynamic_deps, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local, local_defines, malloc, module_interfaces, nocopts, reexport_deps, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
cc_test()
kuralı bir test derler. Burada bir test
bazı test kodlarının etrafında kullanılan ikili sarmalayıcıdır.
Varsayılan olarak, C++ testleri dinamik olarak bağlanır.
.
Bir birim testini statik olarak bağlamak için
linkstatic=True
Test etmenizin neden gerekli olduğunu açıklamak isterim.
linkstatic
; muhtemelen bu bariz değildir.
Dolaylı çıkış hedefleri
name.stripped
(yalnızca açıkça istendiğinde oluşturulur): Sadeleştirilmiş sürümü de vardır.strip -g
, hata ayıklamayı kaldırmak için ikili programda çalıştırılıyor anlamına gelir. Komut satırında ek şerit seçenekleri--stripopt=-foo
name.dwp
(yalnızca açıkça istendiğinde oluşturulur): Eğer Fission etkin: hata ayıklama Uzaktan dağıtılan ikili programlarda hata ayıklamaya uygun bilgi paketi dosyası. Diğer: anlamına gelir.
Aşağıdakiler hariç olmak üzere cc_binary() bağımsız değişkenlerini görün
stamp
bağımsız değişkeni testler için varsayılan olarak 0'a ayarlanır ve
bu cc_test
için ekstra
tüm test kurallarında (*_test) ortak özellikler.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer Bu URL'ler |
srcs
|
Etiket listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) ön işleme tabi tutulmaz ve genellikle anlatacağım. Önceden işlenmiş derleme dosyaları (.S) önceden işlenir ve genellikle kullanarak derleyiciyi detaylandırırsınız.
İzin verilen
... ve bu dosyaları oluşturan kurallar (ör. |
data
|
Etiket listesi; varsayılan değer data ile ilgili genel yorumları göster
tarafından tanımlanan tipik
çoğu derleme kuralına bakın.
Oluşturulan bir dosyanın adı
C++ kodunuz şu şekilde veri dosyalarına erişebilir:
|
additional_linker_inputs
|
Etiket listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere ikili hedefi vardır. |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, belirtilen sırayla
Pakette özellik belirtilmişse
|
defines
|
Dize listesi; varsayılan değer -D eklenir ve bu hedefe yönelik derleme komut satırına eklenir,
kurala bağlı olarak değişiklik gösterir. Bu tür sorunlarda neden olabileceği için
etkileridir. Şüpheye düştüğünüzde,
Bunun yerine local_defines .
|
dynamic_deps
|
Etiket listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
hdrs_check
|
String; varsayılan değer |
includes
|
Dize listesi; varsayılan değer -isystem path_to_package/include_entry
Bu, yalnızca
Google'ın #include ifadeleri yazma stiline uymaz.
COPTS'nin aksine, bu işaretler bu kural için eklenir
ona bağlı tüm kuralları görebiliriz. (Not: Bu kuralların bağlı olduğu kurallar değildir.)
geniş kapsamlı etkileri olabileceği için dikkatli olun. Şüpheye düştüğünüzde
"-I" COPTS olarak işaretler.
Eklenen |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili programları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
linkshared
|
Boole; varsayılan değer linkshared=True özelliğini ekleyin. Varsayılan olarak
bu seçenek kapalıdır.
Bu işaretin varlığı, bağlantı işleminin
Hem |
linkstatic
|
Boole; varsayılan değer cc_binary ve
cc_test : İkili dosyayı statik
yatırım yapmanız önemlidir. cc_library.link_static için: Aşağıya bakın.
Bu seçenek
Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına
Mümkün olduğunda kullanıcı kitaplıkları için Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dize listesi; varsayılan değer -D eklenir ve bu hedef için derleme komut satırına eklenir,
ancak muhteliflerine değil.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili programları |
module_interfaces
|
Etiket listesi; varsayılan değer C++ Standard'da modül arayüzü dosya uzantısıyla ilgili herhangi bir kısıtlama yoktur
Kullanım bayrak ile korunuyor
|
nocopts
|
String; varsayılan değer COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil)
bu kuralı derlemek amacıyla COPTS öğesinden kaldırılacak.
Bu özelliğe gerek olmamalı veya özellik kullanılmamalıdır
third_party dışında. Değerlerin ön işlemesi yapılmaz
"Marka" dışında hiçbir şekilde değişken yerine
|
reexport_deps
|
Etiket listesi; varsayılan değer |
stamp
|
Tam sayı; varsayılan değer
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Şu amaçlarla kullanılabilir: simgeleri dışa aktarın. |
cc_toolchain
Kural kaynağını görüntülecc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_compatible_with, exec_properties, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, output_licenses, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, toolchains, visibility)
C++ araç zincirini temsil eder.
Bu kural şunlardan sorumludur:
-
C++ işlemlerinin çalışması için gereken tüm yapılar toplanıyor. Bu,
all_files
,compiler_files
,linker_files
veya_files
ile biten diğer özellikler). Bunlar: tüm gerekli dosyaları globbing eden dosya gruplarıdır. -
C++ işlemleri için doğru komut satırları oluşturma. Bu,
CcToolchainConfigInfo
sağlayıcısı (ayrıntılar aşağıdadır).
C++ araç zincirini yapılandırmak için toolchain_config
özelliğini kullanın.
Şuna da bakın:
sayfa
inceleyin.
Araç zincirlerinin derlenmesini ve yapılandırılmasını engellemek için tags = ["manual"]
kullanın
bazel build //...
çağrılırken gereksiz
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
all_files
|
Etiket; zorunlu Tüm cc_toolchain yapılarının koleksiyonu. Bu yapılar tüm rules_cc ile ilgili işlemler (daha hassas kümeler kullanan işlemler hariç yapıları) ayırmanızı sağlar. Bazel,all_files öğesinin bir üst küme olduğunu varsayar
diğer tüm yapı sağlayan özelliklerin (ör. linkstamp derlemesinin her ikisinin de derlenmesi gerekiyor)
ve dosya bağlayacağınız için bu işlem all_files sürer).
|
ar_files
|
Etiket; varsayılan değer |
as_files
|
Etiket; varsayılan değer |
compiler_files
|
Etiket; zorunlu Derleme işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
compiler_files_without_includes
|
Etiket; varsayılan değer |
coverage_files
|
Etiket; varsayılan değer |
dwp_files
|
Etiket; zorunlu Dwp işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
dynamic_runtime_lib
|
Etiket; varsayılan değer Bu parametre, "static_link_cpp_runtimes" etkinleştirildiğini görebilirsiniz. Şimdi de ve bunları dinamik bir şekilde gösterir. |
exec_transition_for_inputs
|
Boole; varsayılan değer |
libc_top
|
Etiket; varsayılan değer |
linker_files
|
Etiket; zorunlu Bağlantı işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
module_map
|
Etiket; varsayılan değer |
objcopy_files
|
Etiket; zorunlu Objcopy işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
output_licenses
|
Dize listesi; varsayılan değer |
static_runtime_lib
|
Etiket; varsayılan değer Bu parametre, "static_link_cpp_runtimes" etkinleştirildiğini görebilirsiniz. Şimdi de ve her şeyi statik olarak içerir. |
strip_files
|
Etiket; zorunlu Banner işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
supports_header_parsing
|
Boole; varsayılan değer |
supports_param_files
|
Boole; varsayılan değer |
toolchain_config
|
Etiket; zorunlu cc_toolchain_config_info özelliğini sağlayan kuralın etiketi.
|
toolchain_identifier
|
String; varsayılan değer
#5380 numaralı sorun düzeltilene kadar
|
cc_toolchain_suite
Kural kaynağını görüntülecc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Kullanımdan kaldırıldı: Kural yoktur ve kaldırılacaktır.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
fdo_prefetch_hints
Kural kaynağını görüntülefdo_prefetch_hints(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanında bulunan bir FDO önceden getirme ipuçları profilini temsil eder. Örnekler:
fdo_prefetch_hints(
name = "hints",
profile = "//path/to/hints:profile.afdo",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; zorunlu İpuçları profilinin etiketi. İpucu dosyası .afdo uzantısına sahiptir Etiket ayrıca bir fdo_Mutlak_path_profile kuralına da işaret edebilir. |
fdo_profile
Kural kaynağını görüntülefdo_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, memprof_profile, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanında bulunan bir FDO profilini temsil eder. Örnek:
fdo_profile(
name = "fdo",
profile = "//path/to/fdo:profile.zip",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
memprof_profile
|
Etiket; varsayılan değer |
profile
|
Etiket; zorunlu FDO profilinin veya onu oluşturan kuralın etiketi. FDO dosyasında şu uzantılardan yararlanabilirsiniz: dizine eklenmemiş LLVM profili için .profraw, dizine eklenmiş LLVM için .profdata profil, LLVM profraw profiline sahip .zip, AutoFDO profili için .afdo, için .xfdo XBinary profili. Etiket ayrıca bir fdo_Mutlak_path_profile kuralına da işaret edebilir. |
proto_profile
|
Etiket; varsayılan değer |
memprof_profile
Kural kaynağını görüntülememprof_profile(name, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanında bulunan bir MEMPROF profilini temsil eder. Örnek:
memprof_profile(
name = "memprof",
profile = "//path/to/memprof:profile.afdo",
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; zorunlu MEMPROF profilinin etiketi. Profilin .profdata uzantısı (dizine eklenmiş/simgeselleştirilmiş memprof için profili) veya memprof .profdata içeren bir zip dosyasının.zip uzantısına dosyası olarak kaydedebilirsiniz. Etiket ayrıca bir fdo_Mutlak_path_profile kuralına da işaret edebilir. |
propeller_optimize
Kural kaynağını görüntülepropeller_optimize(name, cc_profile, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, ld_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanında bir Pervane optimizasyon profilini temsil eder. Örnek:
propeller_optimize(
name = "layout",
cc_profile = "//path:cc_profile.txt",
ld_profile = "//path:ld_profile.txt"
)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
cc_profile
|
Etiket; zorunlu Çeşitli derleme işlemlerine iletilen profilin etiketi. Bu dosyada .txt uzantısıdır. |
ld_profile
|
Etiket; zorunlu Bağlantı işlemine iletilen profilin etiketi. Bu dosyada .txt uzantısıdır. |