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)
Örtülü çı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--stripopt=-foo
kullanılarak ek şerit seçenekleri sağlanabilir. 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ı. Aksi takdirde: Boş bir dosya.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer Bunlar |
srcs
|
Etiketler listesi; varsayılan değer Tüm
Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan tüm kurallar. Farklı uzantılar, farklı programlama dillerini belirtmek için olduğunu unutmayın. |
additional_linker_inputs
|
Etiketler listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
Pakette özellik belirtilmişse
|
defines
|
Dize listesi; varsayılan değer -D ile başa eklenir ve bu hedefin derleme komut satırına ve bu hedefe bağlı her kurala eklenir. Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine local_defines alanına değer tanımlayın.
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" değişikliğine tabidir.
Her dizenin başına Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar tarafından kullanılamaz. |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
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. Bu seçenek varsayılan olarak kapalıdır.
Bu işaretin varlığı, bağlantı işleminin
Hem |
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: ikili dosyayı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinleştirilirse ve bu bir ikili dosya veya testse 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 dosyaları |
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
|
Integer; 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. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
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 kitaplığı arayüz kitaplığına 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", )4. Paylaşılan bir kitaplığı
system_provided=True
ile 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 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. Statik veya paylaşılan kitaplığa bağlama
Unix'te:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # 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'ta:
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 et ö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ı Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
|
hdrs
|
Etiketler 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ı, cc_*
kurallarının hdrs
veya srcs
bölümünde bildirilmelidir. Zorunlu kılınır.
cc_library
kurallarında, hdrs
içindeki başlıklar kitaplığın herkese açık arayüzünü oluşturur ve hem kitaplığın hdrs
ve srcs
içindeki dosyalarından hem de cc_*
kurallarının deps
içindeki dosyalarından ve srcs
içindeki kitaplığı listeleyen dosyalardan doğrudan eklenebilir.
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, programlama dillerinde public
ve private
görünürlüğü arasında karar vermekle yaklaşık olarak aynıdır.
cc_binary
ve cc_test
kurallarının dışa aktarılan bir arayüzü olmadığı için hdrs
özellikleri de yoktur. İkili sisteme veya teste ait tüm başlıklar
doğrudan srcs
içinde listelenmelidir.
Bu kuralları açıklamak 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 etme işlemleri 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 |
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 etme işlemleri için geçerlidir. Yukarıdaki örnekte foo.cc
'ün bar.h
içermesine izin verilir. bar.h
, baz.h
içerebilir. baz.h
ise baz-impl.h
içerebilir. 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
. Bu durumda derleyici, foo.cc
'yi derlerken baz.h
ve baz-impl.h
'ü okuyabilir ancak foo.cc
, #include "baz.h"
içermemelidir. Buna izin verilebilmesi için baz
, foo
'nin deps
alanına eklenmelidir.
Bazel, dahil etme kontrol kurallarını uygulamak için araç zinciri desteğine ihtiyaç duyar.
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
|
Etiketler listesi; varsayılan değer Bunlar |
srcs
|
Etiketler 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 belirtmek için 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 üstbilgiler, bu kuraldaki veya bağımlı kurallardaki kaynaklar tarafından dahil edilmek üzere kullanıma sunulur.
Bu kitaplığın bir istemcisi tarafından eklenmesi amaçlanmayan başlıklar
|
additional_compiler_inputs
|
Etiketler listesi; varsayılan değer |
additional_linker_inputs
|
Etiketler listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları buraya yerleştirilmek üzere değerini döndürü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.
alwayslink, Windows'daki VS 2017 ile çalışmıyorsa bunun nedeni bilinen bir sorundur. Lütfen VS 2017'nizi en son sürüme yükseltin. |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlenmeden önce
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 'tekilerin aksine, bu kitaplıkların üstbilgileri ve dahil etme yolları (ve tüm geçişli bağımlılıkları) yalnızca bu kitaplığın derlenmesi için kullanılır, kendisine bağlı kitaplıklar için kullanılmaz. implementation_deps ile belirtilen kitaplıklar hâlâ şurada bağlı:
ikili hedefleridir.
Kullanım şimdilik cc_libraries ile sınırlıdır ve bayrak ile korunur
|
include_prefix
|
String; varsayılan değer Ayarlandığında, bu kuralın Bu ön ek eklenmeden önce |
includes
|
Dize listesi; varsayılan değer
"Değişken yap" yerine koyma işlemine 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 'e eklenir.
Bu listedeki |
linkstamp
|
Etiket; varsayılan değer base paketinde ihtiyaç duyulur.
|
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: ikili dosyayı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinleştirilirse ve bu bir ikili dosya veya testse bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir 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 muhtaç kişilerle değil.
|
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS 'ten kaldırılır.
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
|
Etiketler listesi; varsayılan değer Bu, tek başına derlenemeyen başlık dosyalarının tanımlandığı yerdir. Yani, geçerli kod oluşturmak için her zaman diğer kaynak dosyaları tarafından metinsel 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ığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
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
kurallarına yönlendirmelidir.
Ö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
|
Etiketler listesi; varsayılan değer proto_library
kurallarının listesi.
|
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
ve baz
'yi statik olarak bağlar. baz
, geçişli bir 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ığı, hangi sembollerin dışa aktarılacağını kontrol etmez. Yalnızca iki paylaşılan kitaplık aynı hedefleri dışa aktarırsa analiz aşamasında hata vermek için dışa aktarıldığı varsayılan öğeleri kullanır.
cc_shared_library
'ün her doğrudan bağımlılığının dışa aktarıldığı varsayılır. Bu nedenle Bazel, analiz sırasında foo
'in foo_shared
tarafından dışa aktarıldığını varsayar. baz
, foo_shared
tarafından dışa aktarıldığı varsayılmaz. 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 cc_shared_library
içinde görünmelidir. 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. Bu sorunu düzeltmek için kitaplıkların cc_shared_library
bağımlılıkları arasından birinde 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ığı içeren yeni bir cc_shared_library
oluşturduğunuzda ortaya çıkar.
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. Hedefi dışa aktaran üçüncü bir kitaplık da kullanabilirsiniz.
Üçü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
'ün geçişli kapatma kapsamındaki bir kitaplığa cc_shared_library
bağımlılıkları kullanmadan erişilebildiği ancak dynamic_deps
'de farklı bir cc_shared_library
'ye bağlı olduğu ve dışa aktarılmadığı anlamına gelir.
Çö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. Bu nedenle, cc_shared_library
'daki deps
bölümüne ait değildir. Ö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, 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.
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ı, birden fazla
Uygulama, aynı kitaplık statik olarak bağlandığında da hataları tetikler.
birden fazla |
additional_linker_inputs
|
Etiketler 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
Paylaşılan kitaplık tarafından dışa aktarıldığı anlaşılan tüm hedefler
Bu özelliğin aslında bu hedeflere bir bağımlılık kenarı eklemediğini, bunun yerine bağımlılık kenarının 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. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
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 mutlak bir yolda bulunan bir FDO ön getirme ipucu profilini temsil eder. Ö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ındaki 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 Bunlar |
srcs
|
Etiket listesi; varsayılan değer Tüm
Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, gcc sözleşmesine uygun olarak farklı programlama dillerini gösterir. |
additional_linker_inputs
|
Etiketler listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
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. Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine local_defines alanına tanımlama değerleri ekleyin.
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" yerine koyma işlemine 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 dosyaları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine, önüne
çok önemlidir.
Bu listedeki |
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: ikili dosyayı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek varsayılan olarak
Etkinleştirilirse ve bu bir ikili dosya veya testse bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Bir yürütülebilir 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 muhtaç kişilerle değil.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
nocopts
|
String; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralı derlemek amacıyla COPTS 'ten kaldırılır.
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 aşağıdakilerden 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.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu
sayfada
da bilgi bulabilirsiniz.
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ı taşları, rules_cc ile ilgili tüm işlemlere giriş olarak eklenir (aşağıdaki özelliklerden daha hassas yapı taşı kümeleri kullanan işlemler hariç). Bazel,all_files 'ün diğer tüm yapı sağlayıcı özelliklerinin üst kümesi olduğunu varsayar (ör. bağlantı damgası derlemesi için hem derleme hem de bağlantı dosyalarına ihtiyaç duyulur, bu nedenle all_files kullanılır).
|
ar_files
|
Etiket; varsayılan değer Arşivleme işlemleri için gerekli tüm cc_toolchain yapılarını içeren koleksiyon. |
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ı içeren koleksiyon. |
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ı içeren koleksiyon. |
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; varsayılan değer |
libc_top
|
Etiket; varsayılan değer |
linker_files
|
Etiket; zorunlu İşlemleri bağlamak için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
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 sorunu 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 aşağıdakilerden sorumludur:
- İlgili tüm C++ araç zincirlerini toplama
-
Bazel'e iletilen
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri seçin.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu sayfada da bilgi bulabilirsiniz.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
toolchains
|
Dizelerin etiketlerle eşlendiği sözlük; yapılandırılamaz; 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", }, ) |