Kurallar
- cc_binary
- cc_import
- cc_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ülemecc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, dynamic_deps, env, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, module_interfaces, nocopts, output_licenses, package_metadata, reexport_deps, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Yürütülebilir bir ikili dosya oluşturur.
Hedefin
name
, uygulamanın ana giriş noktası olan kaynak dosyanın adıyla aynı olmalıdır (uzantı hariç).
Örneğin, giriş noktanız main.cc
ise adınız main
olmalıdır.
Örtülü çıkış hedefleri
name.stripped
(yalnızca açıkça istendiğinde oluşturulur): İkili programın çıkarılmış sürümü. Hata ayıklama sembollerini kaldırmak için ikili programdastrip -g
çalıştırılır.--stripopt=-foo
kullanılarak komut satırında ek şerit seçenekleri sağlanabilir.name.dwp
(yalnızca açıkça istenirse oluşturulur): Fission etkinse: Uzaktan dağıtılan ikili dosyaların hata ayıklaması için uygun bir hata ayıklama bilgileri paketi dosyası. Aksi takdirde: boş bir dosya.
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 linkopts içinde bunlara referans vermek de mümkündür ancak bu kullanım alanı için lütfen additional_linker_inputs 'ı göz önünde bulundurun.
|
srcs
|
Etiket listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) önceden işlenmez ve genellikle derleyici kullanılarak oluşturulur. Önceden işlenmiş derleme dosyaları (.S) önceden işlenir ve genellikle C/C++ derleyicisi kullanılarak oluşturulur.
Tüm
İzin verilen
... ve bu dosyaları oluşturan tüm kurallar (ör. |
data
|
Etiket listesi; varsayılan değer data
ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
Bir C++ kodunuz bu veri dosyalarına şu şekilde erişebilir:
|
additional_linker_inputs
|
Etiket listesi; varsayılan değer
Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
conlyopts
|
Dizelerin listesi; varsayılan değer |
copts
|
Dizelerin listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Paket, özelliği
|
cxxopts
|
Dizelerin listesi; varsayılan değer |
defines
|
Dizelerin listesi; varsayılan değer -D önek eklenir ve bu hedefin derleme komut satırına, ayrıca kendisine bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkiler yaratabileceğinden çok dikkatli olun. Tanımlar, bu hedefe bağlı olan her hedefe eklenir. Şüpheye düştüğünüzde bunun yerine local_defines öğesine değer tanımlayın.
|
dynamic_deps
|
Etiket listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
hdrs_check
|
Dize; varsayılan değer |
includes
|
Dizelerin listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu yalnızca #include ifadelerinin Google yazım stiline uymayan üçüncü taraf kitaplıkları için kullanılmalıdır.
COPTS'tan farklı olarak, bu işaretler bu kural ve buna bağlı olan her kural için eklenir. (Not: bağlı olduğu kurallar değil!) Bu durumun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretleri ekleyin.
Eklenen |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili dosyaları |
linkopts
|
Dizelerin listesi; varsayılan değer LINKOPTS 'ya eklenir.
Bu listede |
linkshared
|
Boole değeri; varsayılan değer linkshared=True özelliğini ekleyin. Bu seçenek varsayılan olarak devre dışıdır.
Bu işaretin varlığı,
Hem |
linkstatic
|
Boole değeri; varsayılan değer cc_binary ve cc_test için: İkili dosyayı statik modda bağlayın. cc_library.link_static için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinleştirilirse ve bu bir ikili veya test ise bu seçenek, mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dizelerin listesi; varsayılan değer -D öneki eklenir ve bu hedef için derleme komut satırına eklenir ancak bağımlılarına eklenmez. defines 'dan farklı olarak tanımlar yalnızca bu hedef için derleme komut satırına eklenir.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikilileri |
module_interfaces
|
Etiket listesi; varsayılan değer C++ Standard'da modül arayüzü dosya uzantısıyla ilgili bir kısıtlama yoktur.
Kullanım, |
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralın derlenmesi amacıyla COPTS 'dan kaldırılır.
Bu özelliğin third_party dışında kullanılması veya gerekli olması beklenmez. Değerler, "Marka" değişkeni değiştirme dışında herhangi bir şekilde önceden işlenmez.
|
reexport_deps
|
Etiket listesi; varsayılan değer |
stamp
|
Tam sayı; varsayılan değer
Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. |
cc_import
Kural kaynağını görüntülemecc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, includes, interface_library, linkopts, objects, package_metadata, pic_objects, pic_static_library, restricted_to, shared_library, static_library, strip_include_prefix, 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 = True,
)
cc_import(
name = "mylib",
hdrs = ["mylib.h"],
shared_library = "libmylib.so",
)
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",
)
system_provided=True
ile bağlama
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 = True,
)
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 = True,
)
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",
)
Geri kalanlar 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 = True, # default value
)
# second will link to libmylib.so (or libmylib.lib)
cc_binary(
name = "second",
srcs = ["second.cc"],
deps = [":mylib"],
linkstatic = False,
)
cc_import
, include özelliğini destekler. Örneğin:
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ı Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
|
hdrs
|
Etiket listesi; varsayılan değer |
alwayslink
|
Boole değeri; varsayılan değer Windows'da VS 2017 ile alwayslink çalışmıyorsa bu durum bilinen bir sorundan kaynaklanmaktadır. Lütfen VS 2017'nizi en son sürüme yükseltin. |
includes
|
Dizelerin listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu yalnızca #include ifadelerinin Google yazım stiline uymayan üçüncü taraf kitaplıkları için kullanılmalıdır.
COPTS'tan farklı olarak, bu işaretler bu kural ve buna bağlı olan her kural için eklenir. (Not: bağlı olduğu kurallar değil!) Bu durumun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretleri ekleyin.
Varsayılan |
interface_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
linkopts
|
Dizelerin listesi; varsayılan değer LINKOPTS 'ya eklenir.
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:
|
strip_include_prefix
|
Dize; varsayılan değer Bu kural ayarlandığında, Göreli yol ise paketle ilgili bir yol olarak kabul edilir. Mutlak bir yol ise depoya göreli yol olarak anlaşılır.
Bu özellik yalnızca |
system_provided
|
Boole değeri; varsayılan değer interface_library belirtilmeli ve shared_library boş olmalıdır.
|
cc_library
Kural kaynağını görüntülemecc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hdrs_check, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, module_interfaces, package_metadata, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
C++ ile derlenmiş kitaplıklar için cc_library()
kullanın.
Sonuç, ihtiyaca bağlı olarak .so
, .lo
veya .a
olur.
Statik bağlantı ile cc_library
öğesine bağlı bir şey oluşturursanız bağımlı kitaplık kuralının çıkışı .a
dosyası olur. alwayslink=True
belirtirseniz .lo
dosyası elde edersiniz.
Paylaşılan kitaplık için gerçek çıkış dosyası adı libfoo.so
'dır. Burada foo, kuralın adıdır. Diğer kitaplık türleri sırasıyla .lo
ve .a
ile biter. Örneğin, bir Python modülünü tanımlamak için belirli bir paylaşılan kitaplık adına ihtiyacınız varsa kitaplığı istediğiniz ada kopyalamak için genrule kullanın.
Üstbilgi ekleme kontrolü
Derlemede kullanılan tüm başlık dosyaları, cc_*
kurallarının hdrs
veya srcs
bölümünde bildirilmelidir.
Bu ayar zorunlu kılındı.
cc_library
kuralları için hdrs
içindeki başlıklar, kitaplığın herkese açık arayüzünü oluşturur ve hem hdrs
hem de srcs
içindeki dosyalardan doğrudan eklenebilir. Ayrıca, kitaplığı deps
içinde listeleyen cc_*
kurallarının hdrs
ve srcs
içindeki dosyalarından da eklenebilir.
srcs
içindeki başlıklar yalnızca kitaplığın hdrs
ve srcs
bölümlerindeki dosyalardan doğrudan eklenmelidir. Bir başlığı hdrs
veya srcs
içine yerleştirip yerleştirmeyeceğinize karar verirken bu kitaplığın tüketicilerinin başlığı doğrudan ekleyebilmesini isteyip istemediğinizi göz önünde bulundurmalısınız. Bu, programlama dillerinde public
ve private
görünürlüğü arasındaki karara benzer.
cc_binary
ve cc_test
kurallarının dışa aktarılmış bir arayüzü olmadığı için hdrs
özelliği de yoktur. Doğrudan ikiliye veya teste ait tüm başlıklar srcs
içinde listelenmelidir.
Bu kuralları göstermek 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 eklemeler aşağıdaki tabloda listelenmiştir.
Örneğin foo.cc
, foo.h
ve bar.h
değerlerini doğrudan içerebilir ancak baz.h
değerini içeremez.
Dosya dahil | İzin verilen eklemeler |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
bar-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 etme denetimi kuralları yalnızca doğrudan dahil etmeler için geçerlidir. Yukarıdaki örnekte foo.cc
, bar.h
'yi içerebilir. bar.h
, baz.h
'yi içerebilir. baz.h
ise baz-impl.h
'ü içerebilir. Teknik olarak, bir .cc
dosyasının derlenmesi, geçişli deps
kapanışındaki herhangi bir cc_library
içinde hdrs
veya srcs
'deki herhangi bir başlık dosyasını geçişli olarak içerebilir. Bu durumda derleyici, foo.cc
derlenirken baz.h
ve baz-impl.h
değerlerini okuyabilir ancak foo.cc
, #include "baz.h"
değerini içermemelidir. Buna izin verilebilmesi için baz
, foo
adlı kullanıcının deps
adlı kullanıcısına eklenmelidir.
Bazel, dahil etme kontrolü kurallarını uygulamak için araç zinciri desteğine bağlıdır.
layering_check
özelliği, araç zinciri tarafından desteklenmeli ve açıkça istenmelidir. Örneğin, --features=layering_check
komut satırı işareti veya package
işlevinin features
parametresi aracılığıyla istenebilir. Bazel tarafından sağlanan araç zincirleri, bu özelliği yalnızca Unix ve macOS'te clang ile destekler.
Örnekler
Ana ikili kod bu kodu referans almasa da bağlayıcıyı bu kodu bağlamaya zorlamak için alwayslink
işaretini kullanırız.
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 = True,
)
Aşağıdaki örnek, third_party/python2_4_3/BUILD
sitesinden alınmıştır.
Kodun bir kısmı dl
kitaplığını (başka bir dinamik kitaplığı yüklemek için) kullandığından bu kural, dl
kitaplığını bağlamak için -ldl
bağlantı seçeneğini belirtir.
cc_library(
name = "python2_4_3",
linkopts = [
"-ldl",
"-lutil",
],
deps = ["//third_party/expat"],
)
Aşağıdaki örnek third_party/kde/BUILD
kaynağından alınmıştır.
Önceden oluşturulmuş .so
dosyalarını depoda saklarız.
Başlık 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
kaynağından alınmıştır.
Üçüncü taraf kodu genellikle defines
ve linkopts
gerektirir.
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 oluşturduğunuzda, "deps" adına rağmen, bu kitaplığın tüm istemcileri buraya ait değildir. Çalışma zamanı veri bağımlılıkları Önceden derlenmiş bir üçüncü taraf kitaplığını bağlamak için adını Bu kitaplığa bağlamadan bir şeye bağlı olmak için bunun adını |
srcs
|
Etiket listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) önceden işlenmez ve genellikle derleyici kullanılarak oluşturulur. Önceden işlenmiş derleme dosyaları (.S) önceden işlenir ve genellikle C/C++ derleyicisi kullanılarak oluşturulur.
Tüm
İzin verilen
... ve bu dosyaları oluşturan tüm kurallar (ör. |
data
|
Etiket listesi; varsayılan değer data
ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
Bir C++ kodunuz bu veri dosyalarına şu şekilde erişebilir:
|
hdrs
|
Etiket listesi; varsayılan değer Bu, kitaplığın arayüzünü açıklayan başlık dosyalarını bildirmek için kesinlikle tercih edilen konumdur. Bu üstbilgiler, bu kuraldaki veya bağımlı kurallardaki kaynaklar tarafından dahil edilmek üzere kullanılabilir.
Bu kitaplığın bir istemcisi tarafından dahil edilmesi amaçlanmayan üstbilgiler, yayınlanmış bir üstbilgi tarafından dahil edilmiş olsalar bile bunun yerine İ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ı, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
alwayslink
|
Boole değeri; varsayılan değer srcs içinde listelenen dosyaların tüm nesne dosyalarında bağlantı oluşturur.
Bu, kodunuz ikilideki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz, bir hizmet tarafından sağlanan geri çağırmayı almak için kaydediliyorsa) kullanışlıdır.
Windows'da VS 2017 ile alwayslink çalışmıyorsa bu durum bilinen bir sorundan kaynaklanmaktadır. Lütfen VS 2017'nizi en son sürüme yükseltin. |
conlyopts
|
Dizelerin listesi; varsayılan değer |
copts
|
Dizelerin listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Paket, özelliği
|
cxxopts
|
Dizelerin listesi; varsayılan değer |
defines
|
Dizelerin listesi; varsayılan değer -D önek eklenir ve bu hedefin derleme komut satırına, ayrıca kendisine bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkiler yaratabileceğinden çok dikkatli olun. Tanımlar, bu hedefe bağlı olan her hedefe eklenir. Şüpheye düştüğünüzde bunun yerine local_defines öğesine değer tanımlayın.
|
hdrs_check
|
Dize; varsayılan değer |
implementation_deps
|
Etiket listesi; varsayılan değer deps 'dan farklı olarak, bu kitaplıkların (ve tüm geçişli bağımlılıklarının) başlıkları ve dahil etme yolları yalnızca bu kitaplığın derlenmesi için kullanılır ve kendisine bağlı olan kitaplıklar için kullanılmaz. implementation_deps ile belirtilen kitaplıklar, bu kitaplığa bağlı ikili hedeflerde hâlâ bağlantılıdır.
|
include_prefix
|
Dize; varsayılan değer Ayarlanmışsa bu kuralın Bu ön ek eklenmeden önce Bu özellik yalnızca |
includes
|
Dizelerin listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu yalnızca #include ifadelerinin Google yazım stiline uymayan üçüncü taraf kitaplıkları için kullanılmalıdır.
COPTS'tan farklı olarak, bu işaretler bu kural ve buna bağlı olan her kural için eklenir. (Not: bağlı olduğu kurallar değil!) Bu durumun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretleri ekleyin.
Eklenen |
linkopts
|
Dizelerin listesi; varsayılan değer cc_binary.linkopts sayfasına göz atın.
linkopts özelliği, deps özellikleri (veya benzer şekilde işlenen diğer özellikler: cc_binary öğesinin malloc özelliği) aracılığıyla doğrudan veya dolaylı olarak bu kitaplığa bağlı olan tüm hedeflere de uygulanır. Bağımlılık linkopts'leri, bağımlı linkopts'lerden önceliklidir (yani bağımlılık linkopts'leri komut satırında daha sonra görünür).
--linkopt içinde belirtilen Linkopts, kural linkopts'larına göre önceliklidir.
Ayrıca, "-Wl,-soname" veya "-Xlinker -soname" seçeneklerinin desteklenmediğini ve bu özellikte hiçbir zaman belirtilmemesi gerektiğini de unutmayın. |
linkstamp
|
Etiket; varsayılan değer base paketinde kullanılması gerekir.
|
linkstatic
|
Boole değeri; varsayılan değer cc_binary ve cc_test için: İkili dosyayı statik modda bağlayın. cc_library.link_static için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinleştirilirse ve bu bir ikili veya test ise bu seçenek, mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dizelerin listesi; varsayılan değer -D öneki eklenir ve bu hedef için derleme komut satırına eklenir ancak bağımlılarına eklenmez. defines 'dan farklı olarak tanımlar yalnızca bu hedef için derleme komut satırına eklenir.
|
module_interfaces
|
Etiket listesi; varsayılan değer C++ Standard'da modül arayüzü dosya uzantısıyla ilgili bir kısıtlama yoktur.
Kullanım, |
strip_include_prefix
|
Dize; varsayılan değer Bu kural ayarlandığında, Göreli yol ise paketle ilgili bir yol olarak kabul edilir. Mutlak bir yol ise depoya göreli yol olarak anlaşılır.
Bu özellik yalnızca |
textual_hdrs
|
Etiket listesi; varsayılan değer Bu konum, kendi başlarına derlenemeyen başlık dosyalarını bildirmek için kullanılır. Başka bir deyişle, geçerli kod oluşturmak için her zaman diğer kaynak dosyalar tarafından metin olarak dahil edilmeleri gerekir. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. |
cc_shared_library
Kural kaynağını görüntülemecc_shared_library(name, deps, additional_linker_inputs, compatible_with, deprecation, dynamic_deps, exec_compatible_with, exec_group_compatible_with, exec_properties, exports_filter, features, package_metadata, 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şturur.
Ö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
ve baz
'yi statik olarak bağlar. baz
, geçişli bir bağımlılıktır. bar
, dynamic_dep
bar_shared
tarafından dinamik olarak sağlandığı için bağlantı oluşturulmaz.
foo_shared
, hangi sembollerin dışa aktarılacağını kontrol etmek için bir bağlayıcı komut dosyası (*.lds) kullanır. cc_shared_library
Kural mantığı, hangi sembollerin dışa aktarılacağını kontrol etmez. Yalnızca, iki paylaşılan kitaplık aynı hedefleri dışa aktarıyorsa analiz aşamasında hata vermek için dışa aktarıldığı varsayılanı kullanır.
cc_shared_library
öğesinin her doğrudan bağımlılığının dışa aktarıldığı varsayılır. Bu nedenle Bazel, analiz sırasında foo
öğesinin foo_shared
tarafından dışa aktarıldığını varsayar. baz
öğesinin foo_shared
tarafından dışa aktarıldığı varsayılmaz. exports_filter
ile eşleşen her hedef de dışa aktarılmış olarak kabul edilir.
Örnekteki her bir cc_library
en fazla bir cc_shared_library
içinde görünmelidir. baz
öğesini bar_shared
öğesine de bağlamak istersek baz
öğesine tags = ["LINKABLE_MORE_THAN_ONCE"]
eklememiz gerekir.
shared_lib_name
özelliği nedeniyle, bar_shared
tarafından oluşturulan dosya, Linux'ta varsayılan olarak sahip olacağı libbar.so
adı yerine bar.so
adını alır.
Hatalar
Two shared libraries in dependencies export the same symbols.
Bu durum, aynı hedefi dışa aktaran iki farklı cc_shared_library
bağımlılıkla hedef oluşturduğunuzda meydana gelir. Bu sorunu düzeltmek için cc_shared_library
bağımlılıklarından birinde kitaplıkların dışa aktarılmasını durdurmanız gerekir.
Two shared libraries in dependencies link the same library statically
Bu durum, aynı hedefi statik olarak bağlayan iki farklı cc_shared_library
bağımlılığıyla yeni bir cc_shared_library
oluşturduğunuz her seferde meydana gelir.
Dışa aktarma hatalarına benzer.
Bu sorunu düzeltmenin bir yolu, kitaplığın cc_shared_library
bağımlılıklarından birine bağlanmasını durdurmaktır. Aynı zamanda, kitaplığı hâlâ bağlayan taraf, kitaplığı dışa aktarmalıdır. Böylece, kitaplığı bağlamayan taraf, sembollerin görünürlüğünü korur. Bir diğer yöntem ise hedefi dışa aktaran üçüncü bir kitaplığı kullanmaktır.
Üçüncü bir yöntem ise cc_library
öğesini LINKABLE_MORE_THAN_ONCE
ile etiketlemektir. Ancak bu düzeltme nadiren kullanılmalıdır ve cc_library
öğesinin birden fazla kez bağlanmanın güvenli olduğundan kesinlikle emin olmalısınız.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Bu, deps
öğenizin geçişli kapanımındaki bir kitaplığa cc_shared_library
bağımlılıklarından birinden geçmeden ulaşılabildiği ancak bu kitaplığın dynamic_deps
içinde farklı bir cc_shared_library
öğesine zaten bağlandığı ve dışa aktarılmadığı anlamına gelir.
Çözüm, bağımlılıktan dışa aktarmak veya dışa aktaran üçüncü bir cc_shared_library
çekmektir.cc_shared_library
Do not place libraries which only contain a precompiled dynamic library in deps.
Önceden derlenmiş bir dinamik kitaplığınız varsa bu kitaplığın, şu anda oluşturduğunuz mevcut cc_shared_library
hedefiyle statik olarak bağlanması gerekmez ve bağlanamaz. Bu nedenle, cc_shared_library
'nın deps
bölümünde yer almaz. Bu önceden derlenmiş dinamik kitaplık, cc_libraries
öğelerinizden birinin bağımlılığıysa cc_library
öğesinin doğrudan bu kitaplığa bağımlı olması gerekir.
Trying to export a library already exported by a different shared library
Mevcut kuralda, dinamik bağımlılıklarınızdan biri tarafından zaten dışa aktarılmakta olan bir hedefi dışa aktardığınızı iddia ediyorsanız bu hatayı görürsünüz.
Bu sorunu düzeltmek için hedefi deps
öğesinden kaldırın ve yalnızca dinamik bağımlılıktan yararlanın 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 bağımlılıkların geçişli kitaplık bağımlılıkları,
Kural uygulaması, analiz sırasında
Aynı kitaplık birden fazla |
additional_linker_inputs
|
Etiket listesi; varsayılan değer user_link_flags özelliği aracılığıyla yapabilirsiniz.
|
dynamic_deps
|
Etiket listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
exports_filter
|
Dizelerin listesi; varsayılan değer
Herhangi bir hedef
Bu özelliğin, bu hedeflere aslında bir bağımlılık kenarı eklemediğini unutmayın. Bağımlılık kenarı bunun yerine Aşağıdaki söz dizimine izin verilir: foo/BUILD'deki herhangi bir hedefi hesaba katmak için
|
roots
|
Etiket listesi; varsayılan değer |
shared_lib_name
|
Dize; varsayılan değer |
static_deps
|
Dizelerin listesi; varsayılan değer |
user_link_flags
|
Dizelerin 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. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. |
cc_static_library
Kural kaynağını görüntülemecc_static_library(name, deps, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Elde edilen statik kitaplık, deps
içinde listelenen hedeflerin nesne dosyalarını ve geçişli bağımlılıklarını içerir. PIC
nesnelerine öncelik verilir.
Çıkış grupları
linkdeps
deps
içinde listelenen hedeflerin, statik kitaplığa herhangi bir nesne dosyası katkısında bulunmayan ancak en az bir statik, dinamik veya arayüz kitaplığı sağlayan geçişli bağımlılıklarının etiketlerini içeren bir metin dosyası. Elde edilen statik kitaplığın, bağlantı zamanında bu kitaplıkların kullanılabilir olmasını gerektirebilir.
linkopts
linkopts
, deps
içinde listelenen hedeflerin tüm geçişli bağımlılıklarının kullanıcı tarafından sağlanan linkopts
değerini içeren bir metin dosyası.
Yinelenen semboller
Varsayılan olarak, cc_static_library
kuralı, ortaya çıkan statik kitaplığın yinelenen sembol içermediğini kontrol eder. Bu durumda, derleme başarısız olur ve yinelenen sembolleri ve bunları içeren nesne dosyalarını listeleyen bir hata mesajı gösterilir.
Bu kontrol, features = ["-symbol_check"]
ayarlanarak hedef veya paket başına ya da --features=-symbol_check
aracılığıyla genel olarak devre dışı bırakılabilir.
symbol_check
için araç zinciri desteği
Bazel ile birlikte gönderilen otomatik olarak yapılandırılmış C++ araç zincirleri, tüm platformlarda symbol_check
özelliğini destekler. Özel araç zincirleri, iki yöntemden birini kullanarak destek ekleyebilir:
ACTION_NAMES.validate_static_library
işlemini uygulama vesymbol_check
özelliğiyle etkinleştirme. İşlemde ayarlanan araç, iki bağımsız değişkenle çağrılır: yinelenen sembollerin kontrol edileceği statik kitaplık ve kontrol başarılı olursa oluşturulması gereken bir dosyanın yolu.symbol_check
özelliğinin, statik kitaplık oluşturma işleminin yinelenen sembollerde başarısız olmasına neden olan arşivleyici işaretleri eklemesi.
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 kitaplığa dahil edilmez ancak etiketleri |
cc_test
Kural kaynağını görüntülemecc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, conlyopts, copts, cxxopts, defines, deprecation, dynamic_deps, env, env_inherit, exec_compatible_with, exec_group_compatible_with, exec_properties, features, flaky, hdrs_check, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local, local_defines, malloc, module_interfaces, nocopts, package_metadata, reexport_deps, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Bir cc_test()
kuralı, testi derler. Burada test, bazı test kodlarının etrafındaki 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
değerini belirtin.
Testinizin neden linkstatic
'ye ihtiyacı olduğunu yorum olarak belirtmeniz iyi olabilir. Bu durum muhtemelen açıkça anlaşılmıyordur.
Örtülü çıkış hedefleri
name.stripped
(yalnızca açıkça istendiğinde oluşturulur): İkili programın çıkarılmış sürümü. Hata ayıklama sembollerini kaldırmak için ikili programdastrip -g
çalıştırılır.--stripopt=-foo
kullanılarak komut satırında ek şerit seçenekleri sağlanabilir.name.dwp
(yalnızca açıkça istenirse oluşturulur): Fission etkinse: Uzaktan dağıtılan ikili dosyaların hata ayıklaması için uygun bir hata ayıklama bilgileri paketi dosyası. Aksi takdirde: boş bir dosya.
cc_binary() bağımsız değişkenlerine bakın. Ancak stamp
bağımsız değişkeni testler için varsayılan olarak 0'a ayarlanır ve cc_test
,
tüm test kuralları (*_test) için ortak olan ek özelliklere sahiptir.
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 linkopts içinde bunlara referans vermek de mümkündür ancak bu kullanım alanı için lütfen additional_linker_inputs 'ı göz önünde bulundurun.
|
srcs
|
Etiket listesi; varsayılan değer Tüm Saf derleyici dosyaları (.s, .asm) önceden işlenmez ve genellikle derleyici kullanılarak oluşturulur. Önceden işlenmiş derleme dosyaları (.S) önceden işlenir ve genellikle C/C++ derleyicisi kullanılarak oluşturulur.
Tüm
İzin verilen
... ve bu dosyaları oluşturan tüm kurallar (ör. |
data
|
Etiket listesi; varsayılan değer data
ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
Bir C++ kodunuz bu veri dosyalarına şu şekilde erişebilir:
|
additional_linker_inputs
|
Etiket listesi; varsayılan değer
Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
conlyopts
|
Dizelerin listesi; varsayılan değer |
copts
|
Dizelerin listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Paket, özelliği
|
cxxopts
|
Dizelerin listesi; varsayılan değer |
defines
|
Dizelerin listesi; varsayılan değer -D önek eklenir ve bu hedefin derleme komut satırına, ayrıca kendisine bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkiler yaratabileceğinden çok dikkatli olun. Tanımlar, bu hedefe bağlı olan her hedefe eklenir. Şüpheye düştüğünüzde bunun yerine local_defines öğesine değer tanımlayın.
|
dynamic_deps
|
Etiket listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
hdrs_check
|
Dize; varsayılan değer |
includes
|
Dizelerin listesi; varsayılan değer -isystem path_to_package/include_entry oluşturur.
Bu yalnızca #include ifadelerinin Google yazım stiline uymayan üçüncü taraf kitaplıkları için kullanılmalıdır.
COPTS'tan farklı olarak, bu işaretler bu kural ve buna bağlı olan her kural için eklenir. (Not: bağlı olduğu kurallar değil!) Bu durumun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS'a "-I" işaretleri ekleyin.
Eklenen |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili dosyaları |
linkopts
|
Dizelerin listesi; varsayılan değer LINKOPTS 'ya eklenir.
Bu listede |
linkshared
|
Boole değeri; varsayılan değer linkshared=True özelliğini ekleyin. Bu seçenek varsayılan olarak devre dışıdır.
Bu işaretin varlığı,
Hem |
linkstatic
|
Boole değeri; varsayılan değer cc_binary ve cc_test için: İkili dosyayı statik modda bağlayın. cc_library.link_static için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinleştirilirse ve bu bir ikili veya test ise bu seçenek, mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:
Üretimde |
local_defines
|
Dizelerin listesi; varsayılan değer -D öneki eklenir ve bu hedef için derleme komut satırına eklenir ancak bağımlılarına eklenmez. defines 'dan farklı olarak tanımlar yalnızca bu hedef için derleme komut satırına eklenir.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikilileri |
module_interfaces
|
Etiket listesi; varsayılan değer C++ Standard'da modül arayüzü dosya uzantısıyla ilgili bir kısıtlama yoktur.
Kullanım, |
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralın derlenmesi amacıyla COPTS 'dan kaldırılır.
Bu özelliğin third_party dışında kullanılması veya gerekli olması beklenmez. Değerler, "Marka" değişkeni değiştirme dışında herhangi bir şekilde önceden işlenmez.
|
reexport_deps
|
Etiket listesi; varsayılan değer |
stamp
|
Tam sayı; varsayılan değer
Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. |
cc_toolchain
Kural kaynağını görüntülemecc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, dwp_files, dynamic_runtime_lib, exec_compatible_with, exec_group_compatible_with, exec_properties, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, output_licenses, package_metadata, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, toolchains, visibility)
Bir C++ araç zincirini temsil eder.
Bu kural aşağıdakilerden sorumludur:
-
C++ işlemlerinin çalışması için gereken tüm yapıları toplama. Bu işlem,
all_files
,compiler_files
,linker_files
veya_files
ile biten diğer özellikler gibi özellikler kullanılarak yapılır. Bunlar, en yaygın olarak gerekli tüm dosyaları içeren dosya grubu glob'larıdır. -
C++ işlemleri için doğru komut satırları oluşturma. Bu işlem,
CcToolchainConfigInfo
sağlayıcısı kullanılarak yapılır (ayrıntılar aşağıda verilmiştir).
C++ araç zincirini yapılandırmak için toolchain_config
özelliğini kullanın.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçimi dokümanları için bu
sayfaya
da bakın.
bazel build //...
çağrıldığında araç zincirlerinin gereksiz yere oluşturulup yapılandırılmasını önlemek için tags = ["manual"]
kullanın.
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ı koleksiyonu. Bu yapılar, tüm rules_cc ile ilgili işlemlere giriş olarak eklenir (aşağıdaki özelliklerden daha kesin yapı kümelerini kullanan işlemler hariç). Bazel,all_files öğesinin diğer tüm yapıt sağlayan özelliklerin (ör. linkstamp derlemesi hem derleme hem de bağlantı dosyaları gerektirir, bu nedenle all_files alır) üst kümesi olduğunu varsayar.
Bu, |
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 toplanması. |
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ıtlarının koleksiyonu. |
dynamic_runtime_lib
|
Etiket; varsayılan değer Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde ve bağımlılıkları dinamik olarak bağladığımızda kullanılır. |
exec_transition_for_inputs
|
Boole değeri; 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 toplanması. |
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 toplanması. |
output_licenses
|
Dizelerin listesi; varsayılan değer |
static_runtime_lib
|
Etiket; varsayılan değer Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde ve bağımlılıkları statik olarak bağladığımızda kullanılır. |
strip_files
|
Etiket: zorunlu Şerit işlemleri için gereken tüm cc_toolchain yapılarının toplanması. |
supports_header_parsing
|
Boole değeri; varsayılan değer |
supports_param_files
|
Boole değeri; varsayılan değer |
toolchain_config
|
Etiket: zorunlu cc_toolchain_config_info sağlayan kuralın etiketi.
|
toolchain_identifier
|
Dize; varsayılan değer
#5380 numaralı sorun düzeltilene kadar
|
cc_toolchain_suite
Kural kaynağını görüntülemecc_toolchain_suite(name, compatible_with, deprecation, features, licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Desteği sonlandırıldı: Kural, işlem yapmaz ve kaldırılı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ülemefdo_prefetch_hints(name, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, 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. İpuçları dosyası .afdo uzantısına sahiptir. Etiket, fdo_absolute_path_profile kuralına da işaret edebilir. |
fdo_profile
Kural kaynağını görüntülemefdo_profile(name, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, memprof_profile, package_metadata, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanındaki 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 etiketi veya bunu oluşturan bir kural. FDO dosyasının şu uzantılardan biri olabilir: dizine eklenmemiş LLVM profili için .profraw, dizine eklenmiş LLVM profili için .profdata, LLVM profraw profili içeren .zip, AutoFDO profili için .afdo, XBinary profili için .xfdo. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir. |
proto_profile
|
Etiket; varsayılan değer |
memprof_profile
Kural kaynağını görüntülemememprof_profile(name, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, 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ına (dizinlenmiş/sembolize edilmiş bir memprof profili için) veya memprof .profdata dosyası içeren bir zip dosyası için.zip uzantısına sahip olması gerekir. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir. |
propeller_optimize
Kural kaynağını görüntülemepropeller_optimize(name, cc_profile, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, ld_profile, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Çalışma alanındaki bir Propeller optimizasyon profilini temsil eder. Örnek:
propeller_optimize(
name = "layout",
cc_profile = "//path:cc_profile.txt",
ld_profile = "//path:ld_profile.txt"
)