Kurallar
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- cc_static_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ülemecc_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): İkili programın çıkarılmış bir sürümü. Hata ayıklama sembollerini kaldırmak için ikili programdastrip -g
çalıştırılır.--stripopt=-foo
kullanılarak komut satırında ek şerit seçenekleri sağlanabilir. Bu çıkış yalnızca açıkça istendiğinde oluşturulur.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 |
srcs
|
Etiket 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, gcc kuralına uygun olarak farklı programlama dillerini gösterir. |
additional_linker_inputs
|
Etiket 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
Paket, özelliği bildiriyorsa
|
defines
|
Dize listesi; varsayılan değer -D ile öneklenir ve bu hedefin derleme komut satırına ve buna bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkilere neden olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde, değerleri local_defines öğesine ekleyin.
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" yerine koyma işlemine tabidir.
Her dizenin başına Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alanda yapıldığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar. |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili dosyaları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine eklenir.
Bu listede |
linkshared
|
Boole; yapılandırılamaz; 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: İkiliyi 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 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:
|
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.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikilileri |
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ğe nadiren ihtiyaç duyulur.
|
stamp
|
Tam sayı; varsayılan değer
Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. |
cc_import
Kural kaynağını görüntülemecc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, 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, )
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )
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 (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, )
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, )
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
, 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
hakkındaki 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 Alwayslink, Windows'da VS 2017 ile çalışmıyorsa bu durum bilinen bir sorundan kaynaklanmaktadır. Lütfen VS 2017'nizi 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 değeri; varsayılan değer interface_library belirtilmeli ve shared_library boş olmalıdır.
|
cc_library
Kural kaynağını görüntülemecc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, 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 ekleme kontrolü
Derlemede kullanılan tüm başlık dosyaları, cc_*
kurallarının hdrs
veya srcs
bölümünde bildirilmelidir. Bu ayar zorunlu kılındı.
cc_library
kuralları için hdrs
içindeki başlıklar, kitaplığın herkese açık arayüzünü oluşturur ve hem hdrs
içindeki dosyalardan hem de kitaplığın kendisinin srcs
'sinden doğrudan dahil edilebilir. Ayrıca, kitaplığı deps
'lerinde listeleyen cc_*
kurallarının hdrs
ve srcs
'sindeki dosyalardan da dahil edilebilir.
srcs
içindeki başlıklar yalnızca hdrs
ve kitaplığın srcs
içindeki dosyalardan doğrudan eklenmelidir. Bir başlığı hdrs
veya srcs
içine yerleştirip yerleştirmeyeceğinize karar verirken bu kitaplığın tüketicilerinin başlığı doğrudan ekleyebilmesini isteyip istemediğinizi göz önünde bulundurmalısınız. Bu, programlama dillerinde public
ve private
görünürlüğü arasındaki karara benzer.
cc_binary
ve cc_test
kurallarının dışa aktarılmış bir arayüzü yoktur. Bu nedenle, 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.
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
Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan tüm kurallar. Farklı uzantılar, gcc kuralına uygun olarak farklı programlama dillerini gösterir. |
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 |
additional_compiler_inputs
|
Etiket listesi; varsayılan değer |
additional_linker_inputs
|
Etiket listesi; varsayılan değer Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
alwayslink
|
Boole değeri; varsayılan değer srcs içinde listelenen dosyaların tüm nesne dosyalarında bağlantı oluşturur.
Bu, kodunuz ikilideki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz, bir hizmet tarafından sağlanan geri çağırma işlemini almak için kaydediliyorsa) kullanışlıdır.
Alwayslink, Windows'da VS 2017 ile çalışmıyorsa bu durum bilinen bir sorundan kaynaklanmaktadır. 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
Paket, özelliği bildiriyorsa
|
defines
|
Dize listesi; varsayılan değer -D ile öneklenir ve bu hedefin derleme komut satırına ve buna bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkilere neden olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde, değerleri local_defines öğesine ekleyin.
|
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.
Şu an için kullanım, cc_libraries ile sınırlıdır ve |
include_prefix
|
Dize; varsayılan değer Ayarlanmışsa 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 srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alanda yapıldığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar. |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine eklenir.
Bu listede |
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: İkiliyi 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 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:
|
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.
|
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ğe nadiren ihtiyaç duyulur.
|
strip_include_prefix
|
Dize; varsayılan değer Ayarlanmışsa 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.
|
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_proto_library
Kural kaynağını görüntülemecc_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
dosyalarından C++ kodu oluşturur.
deps
, proto_library
kurallarını 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
kurallarının listesi.
|
cc_shared_library
Kural kaynağını görüntülemecc_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ş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ı,
Analiz sırasında, kural uygulaması, aynı hedefleri birden fazla
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 özniteliğ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
|
shared_lib_name
|
Dize; 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ı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, tags)
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_library
işlemini uygulama vesymbol_check
özelliğiyle etkinleştirme. İşlemde ayarlanan araç, iki bağımsız değişkenle çağrılır: yinelenen sembollerin kontrol edileceği statik kitaplık ve kontrol başarılı olursa oluşturulması gereken bir dosyanın yolu.symbol_check
özelliğinin, statik kitaplık oluşturma işleminin yinelenen sembollerde başarısız olmasına neden olan arşivleyici işaretleri eklemesi.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan değer Herhangi bir nesne dosyası sağlamayan bağımlılıklar statik kitaplığa dahil edilmez ancak etiketleri |
fdo_prefetch_hints
Kural kaynağını görüntülemefdo_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 yolda bulunan bir FDO önceden getirme ipuçları 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ülemefdo_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 yolda bulunan 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
|
Dize; 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ülemememprof_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 mutlak yolda bulunan bir MEMPROF profilini temsil eder. Ö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
|
Dize; varsayılan değer |
profile
|
Etiket; varsayılan değer |
propeller_optimize
Kural kaynağını görüntülemepropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, 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" ) 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ülemecc_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
Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan tüm kurallar. Farklı uzantılar, gcc kuralına uygun olarak farklı programlama dillerini gösterir. |
additional_linker_inputs
|
Etiket 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
Paket, özelliği bildiriyorsa
|
defines
|
Dize listesi; varsayılan değer -D ile öneklenir ve bu hedefin derleme komut satırına ve buna bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkilere neden olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde, değerleri local_defines öğesine ekleyin.
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" yerine koyma işlemine tabidir.
Her dizenin başına Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alanda yapıldığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar. |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak, C++ ikili dosyaları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS öğesine eklenir.
Bu listede |
linkstatic
|
Boole değeri; varsayılan değer cc_binary ve
cc_test için: İkiliyi 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 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:
|
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.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikilileri |
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ğe nadiren ihtiyaç duyulur.
|
stamp
|
Tam sayı; varsayılan değer
Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. |
cc_toolchain
Kural kaynağını görüntülemecc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, 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)
Bir C++ araç zincirini temsil eder.
Bu kural aşağıdakilerden sorumludur:
-
C++ işlemlerinin çalışması için gereken tüm yapıları toplama. Bu işlem,
all_files
,compiler_files
,linker_files
veya_files
ile biten diğer özellikler gibi özellikler kullanılarak yapılır. Bunlar, 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,
CcToolchainConfigInfo
sağlayıcısı kullanılarak yapılır (ayrıntılar aşağıda verilmiştir).
C++ araç zincirini yapılandırmak için toolchain_config
özelliğini kullanın.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçimi dokümanları için bu
sayfaya
da 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ılar kümeleri kullanan işlemler hariç). Bazel,all_files öğesinin diğer tüm yapı sağlayıcı özelliklerin üst kümesi olduğunu varsayar (ör. linkstamp derlemesi hem derleme hem de bağlantı dosyaları gerektirir, bu nedenle all_files alır).
|
ar_files
|
Etiket; varsayılan değer Arşivleme işlemleri için gereken tüm cc_toolchain yapıtlarının toplanması. |
as_files
|
Etiket; varsayılan değer Derleme işlemleri için gereken tüm cc_toolchain yapılarının toplanması. |
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ı. |
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; yapılandırılamaz; varsayılan değer
#5380 numaralı sorun düzeltilene kadar
|
cc_toolchain_suite
Kural kaynağını görüntülemecc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
C++ araç zincirleri koleksiyonunu temsil eder.
Bu kural aşağıdakilerden sorumludur:
- İlgili tüm C++ araç zincirlerini toplama
-
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri seçme Bazel'e iletildi.
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.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
toolchains
|
Dizeleri etiketlerle eşleyen sözlük; yapılandırılamaz; zorunlu "<cpu>" veya "<cpu>|<compiler>" dizelerindencc_toolchain etiketine giden bir harita. Yalnızca --cpu Bazel'e iletildiğinde "<cpu>", hem --cpu hem de --compiler Bazel'e iletildiğinde ise "<cpu>|<compiler>" kullanılır. Ö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", }, ) |