Kurallar
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
Kural kaynağını görüntülecc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
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
Bu çıkış yalnızca açıkça istendiğinde oluşturulur.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
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın. |
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 .
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Üstbilgiler src'lere veya hdrs'lara eklenmelidir, aksi takdirde bağımlı kullanıcılar tarafından kullanılamaz belirli kurallara tabi olacaktır (varsayılan). |
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; nonconfig; 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.linkstatic 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:
|
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ı |
nocopts
|
String; varsayılan değer COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere),
COPTS .
Bu özelliğe nadiren ihtiyaç duyulur.
|
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, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, 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 (Windows)
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ığı
system_provided=True
(Windows) ile bağlama
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
adlı statik veya paylaşılan kitaplığa bağlanılıyor Unix'te:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )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", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.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. |
interface_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
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, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Üstbilgi dahil etme kontrolü
Derlemede kullanılan tüm başlık dosyaları hdrs
veya
srcs
/ cc_*
kural. Zorunlu kılınır.
cc_library
kuralları için hdrs
içindeki başlıklar, şu öğenin herkese açık arayüzünü oluşturur:
yer alır ve hem hdrs
hem de hdrs
klasöründeki dosyalardan doğrudan eklenebilir
ve kitaplığın kendisinden srcs
tanesinin yanı sıra hdrs
ve
Kitaplığı deps
içinde listeleyen cc_*
kuraldan srcs
tanesi.
srcs
öğesindeki başlıklar yalnızca hdrs
klasöründeki dosyalardan doğrudan eklenmelidir
ve kitaplığın srcs
kadarına yer veriliyor. Bir başlığın web sayfasının
hdrs
veya srcs
için bu kitaplığın tüketicilerini isteyip istemediğinizi sormalısınız.
bunu doğrudan dahil edebilirsiniz. Bu, diğer tedarikçilerle yaklaşık olarak
Programlama dillerinde public
ve private
görünürlük.
cc_binary
ve cc_test
kurallarının dışa aktarılmış bir arayüzü olmadığından
ayrıca hdrs
özelliğine sahip değil. İkili program veya teste ait tüm başlıklar
doğrudan srcs
içinde listelenmelidir.
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
öğesinin foo.h
ve bar.h
öğelerini doğrudan içermesine izin verilir, ancak
baz.h
değil.
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.
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
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın. |
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
|
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 .
|
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
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Üstbilgiler src'lere veya hdrs'lara eklenmelidir, aksi takdirde bağımlı kullanıcılar tarafından kullanılamaz belirli kurallara tabi olacaktır (varsayılan). |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine, önüne
çok önemlidir.
Bu listede |
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.linkstatic 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:
|
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.
|
nocopts
|
String; varsayılan değer COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere),
COPTS .
Bu özelliğe nadiren ihtiyaç duyulur.
|
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.
|
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, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, 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, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, 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.
|
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 |
shared_lib_name
|
String; varsayılan değer |
user_link_flags
|
Dize listesi; varsayılan değer cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ). |
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. |
fdo_prefetch_hints
Kural kaynağını görüntülefdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen bir FDO önceden getirme ipucu profilini temsil eder mutlak yol. Örnekler:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; varsayılan değer |
fdo_profile
Kural kaynağını görüntülefdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak yoldaki bir FDO profilini temsil eder. Örnekler:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
absolute_path_profile
|
String; varsayılan değer |
profile
|
Etiket; varsayılan değer |
proto_profile
|
Etiket; varsayılan değer |
memprof_profile
Kural kaynağını görüntülememprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen bir MEMPROF profilini temsil eder mutlak yol. Örnekler:
memprof_profile( name = "memprof", profile = "//path/to/memprof:profile.afdo", ) memprof_profile( name = "memprof_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
absolute_path_profile
|
String; varsayılan değer |
profile
|
Etiket; varsayılan değer |
propeller_optimize
Kural kaynağını görüntülepropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, 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" ) propeller_optimize( name = "layout_absolute", absolute_cc_profile = "/absolute/cc_profile.txt", absolute_ld_profile = "/absolute/ld_profile.txt" )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
ld_profile
|
Etiket; varsayılan değer |
cc_test
Kural kaynağını görüntülecc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, link_extra_lib, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
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
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, farklı programlama dillerini olduğunu unutmayın. |
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 .
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Üstbilgiler src'lere veya hdrs'lara eklenmelidir, aksi takdirde bağımlı kullanıcılar tarafından kullanılamaz belirli kurallara tabi olacaktır (varsayılan). |
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 |
linkstatic
|
Boole; varsayılan değer cc_binary ve
cc_test : İkili dosyayı statik
yatırım yapmanız önemlidir. cc_library.linkstatic 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:
|
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ı |
nocopts
|
String; varsayılan değer COPTS
(kuralın copts özelliğinde açıkça belirtilen değerler dahil olmak üzere),
COPTS .
Bu özelliğe nadiren ihtiyaç duyulur.
|
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_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, 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 Arşivleme işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
as_files
|
Etiket; varsayılan değer Montaj işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
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. |
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; nonconfig; 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)
C++ araç zinciri koleksiyonlarını temsil eder.
Bu kural şunlardan sorumludur:
- Alakalı tüm C++ araç zincirleri toplanıyor.
-
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri seçme Bazel'a aktarılmıştır.
Şuna da bakın: sayfa inceleyin.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
toolchains
|
Sözlük dizelerini etiketlerle eşleme; nonyapılandırabilir; zorunlu "<cpu>" sorgusundan bir harita veya "<cpu>|<derleyici>" dizecc_toolchain etiketi. "<cpu>" yalnızca --cpu olduğunda kullanılır
Bazel'a aktarılır ve "<cpu>|<derleyici>" birlikte kullanıldığında
--cpu ve --compiler Bazel'e iletilir. Örnek:
cc_toolchain_suite( name = "toolchain", toolchains = { "piii|gcc": ":my_cc_toolchain_for_piii_using_gcc", "piii": ":my_cc_toolchain_for_piii_using_default_compiler", }, ) |