Kurallar
- cc_binary
- cc_import
- cc_library
- cc_shared_library
- cc_static_library
- cc_test
- cc_toolchain
- 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, aspect_hints, 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)
Çalıştırılabilir 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=-fookullanı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
|
Dize listesi; varsayılan değer |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Paket, özelliği
|
cxxopts
|
Dize listesi; varsayılan değer |
defines
|
Dize listesi; varsayılan değer -D ile öneklenir ve bu hedefin derleme komut satırına ve 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
|
Dize 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
|
Dize 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ığı, bağlantının
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
|
Dize 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, aspect_hints, 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, bir 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
|
Dize 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
|
Dize 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ın 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, aspect_hints, 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ğlı 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 içinde 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 dosyalardan 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 kendinize sormalı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ığından 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'u 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ı deps'ye 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 sitesinden 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 sitesinden 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 burada yer almaz. Ç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ına bağlanır.
Bu, kodunuz ikilideki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz, bir hizmet tarafından sağlanan geri çağırma işlemini 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
|
Dize listesi; varsayılan değer |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Paket, özelliği
|
cxxopts
|
Dize listesi; varsayılan değer |
defines
|
Dize listesi; varsayılan değer -D ile öneklenir ve bu hedefin derleme komut satırına ve 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
|
Dize 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
|
Dize 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: malloc özelliği cc_binary) aracılığıyla bu kitaplığa doğrudan veya dolaylı olarak bağlı olan tüm hedeflere de uygulanır. Bağımlılık linkopt'ları, bağımlı linkopt'lardan önceliklidir (yani bağımlılık linkopt'ları 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
|
Dize 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ın 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. Bu dosyalar, geçerli kod oluşturmak için her zaman diğer kaynak dosyalar tarafından metin olarak dahil edilmelidir. |
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, aspect_hints, 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şturulmuyor.
foo_shared, hangi sembollerin dışa aktarılacağını kontrol etmek için bir bağlayıcı komut dosyası *.lds dosyası 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 de bar_shared öğesine 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ığı bağlamaya devam eden kullanıcının, kitaplığı dışa aktarması gerekir. Böylece, kitaplığı bağlamayan kullanıcı sembolleri görmeye devam edebilir. 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ı 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 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, deps bölümünde yer almaz.cc_shared_library 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ılan 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
|
Dize 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
|
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. 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, aspect_hints, 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 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ı.deps
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_libraryiş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, aspect_hints, 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=-fookullanı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
|
Dize listesi; varsayılan değer |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Paket, özelliği
|
cxxopts
|
Dize listesi; varsayılan değer |
defines
|
Dize listesi; varsayılan değer -D ile öneklenir ve bu hedefin derleme komut satırına ve 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
|
Dize 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
|
Dize 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ığı, bağlantının
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
|
Dize 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, aspect_hints, 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ı toplar. Bu işlem,
all_files,compiler_files,linker_filesveya_filesile biten diğer özellikler gibi özellikler kullanılarak yapılır. Bunlar, genellikle 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,
CcToolchainConfigInfosağ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 göz atı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ıları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
|
Dize 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
|
fdo_prefetch_hints
Kural kaynağını görüntülemefdo_prefetch_hints(name, aspect_hints, 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, aspect_hints, 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 bu profili 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, aspect_hints, 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, aspect_hints, 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"
)
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 dosyanın .txt uzantısı var. |
ld_profile
|
Etiket: zorunlu Bağlantı işlemine iletilen profilin etiketi. Bu dosyanın .txt uzantısı var. |