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östercc_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 istenirse derlenir): İkili programın stripped sürümü. Hata ayıklama sembollerini kaldırmak içinstrip -g
ikili dosyada ç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 istenirse oluşturulur.name.dwp
(yalnızca açıkça istenirse derlenir): Fission etkinse uzaktan dağıtılan ikililerde hata ayıklama için uygun bir hata ayıklama bilgileri paketi dosyası. Diğer: Boş 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, gcc sözleşmesine göre 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, ikili hedef derlemeden önce
Pakette özellik |
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 için değerleri tanımlayın.
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" yerine koyma işlemine tabidir.
Her dize, Başlıklar, src'lere veya hdrs'lara eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar kullanılamaz. |
link_extra_lib
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS bölümüne eklenir.
Bu listedeki |
linkshared
|
Boole; yapılandırılamaz; varsayılan değer linkshared=True ekleyin. Bu seçenek varsayılan olarak kapalıdır.
Bu işaretin varlığı,
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
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 ile başa eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
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.
|
stamp
|
Tam sayı; varsayılan değer
Damgalanmış 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ığı bağlarken simgeleri 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
'e 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, )
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, )
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. Ö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; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiketler 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 Her zamanlink, Windows'da bilinen bir sorun nedeniyle VS 2017 ile çalışmıyorsa lütfen 2017 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ş bırakılmalı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)
Başlık dahil etme kontrolü
Derlemede kullanılan tüm üst bilgi dosyaları, cc_*
kurallarının hdrs
veya srcs
kurallarına göre tanımlanmalıdır. Bu kural zorunlu kılındı.
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
içindeki başlıklar yalnızca kitaplığın hdrs
ve srcs
alanındaki dosyalardan doğrudan eklenmelidir. hdrs
veya srcs
içine başlık ekleyip eklemeyeceğinize karar verirken, bu kitaplığın tüketicilerinin başlığı doğrudan ekleyebilmesini isteyip istemediğinizi düşünmeniz gerekir. Bu karar, programlama dillerindeki public
ve private
görünürlüğü arasında verilen kararla yaklaşık olarak aynıdır.
cc_binary
ve cc_test
kurallarının dışa aktarılan bir arayüzü olmadığından bu kurallarda hdrs
özelliği de yoktur. Doğrudan ikili dosyaya veya teste ait tüm üstbilgiler 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
'ün foo.h
ve bar.h
'yi doğrudan dahil etmesine izin verilir ancak baz.h
'e izin verilmez.
Dosya dahil | İzin verilen dahil etme işlemleri |
---|---|
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, bir .cc
dosyasının derlemesi, deps
kapatma işleminde bulunan herhangi bir cc_library
içindeki hdrs
veya srcs
içindeki herhangi bir başlık dosyasını aktarmalı olarak içerebilir. 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 ve açık bir şekilde istenmesi gerekir (ör. --features=layering_check
komut satırı işareti veya package
işlevinin features
parametresi aracılığıyla). 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
|
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, gcc sözleşmesine göre farklı programlama dillerini gösterir. |
hdrs
|
Etiketler listesi; varsayılan değer Bu, kitaplığın arayüzünü açıklayan başlık dosyalarını tanımlamak için kesinlikle tercih edilen konumdur. Bu üstbilgiler, bu kuraldaki veya bağımlı kurallardaki kaynaklar tarafından dahil edilmek üzere kullanıma sunulur.
Bu kitaplığın bir müşterisi tarafından dahil edilmemesi amaçlanan üstbilgiler, yayınlanmış bir üstbilgi tarafından dahil edilse bile |
additional_compiler_inputs
|
Etiketler listesi; varsayılan değer |
additional_linker_inputs
|
Etiket listesi; varsayılan Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. |
alwayslink
|
Boole; varsayılan değer srcs listesinde belirtilen dosyaların tüm nesne dosyalarını bağlar (bazılarında ikili program tarafından referans verilen simge olmasa bile).
Bu, kodunuz ikili programdaki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz bir hizmet tarafından sağlanan geri çağırma işlevini almak için kaydoluyorsa) kullanışlıdı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 |
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.
|
implementation_deps
|
Etiket listesi; varsayılan 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, bu kitaplığa bağlı olan ikili hedeflerde hâlâ bağlıdır.
Şu anda kullanım cc_libraries ile sınırlıdır ve |
include_prefix
|
Dize; varsayılan değer Bu kuralın Bu ön ek eklenmeden önce |
includes
|
Dize listesi; varsayılan değer
"Değişken yap" değişikliğine tabidir.
Her dize, Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar tarafından kullanılamaz. |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS bölümüne 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
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 ile başa eklenir ve bu hedefin 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ı derlemek için COPTS öğesinden kaldırılacak.
Bu özelliğe nadiren ihtiyaç duyulur.
|
strip_include_prefix
|
Dize; varsayılan değer Ayarlandığında, bu kuralın Göreli bir yolsa pakete göreli bir yol olarak alınır. Mutlak bir yol ise depoya göreli yol olarak anlaşılır.
|
textual_hdrs
|
Etiket listesi; varsayılan 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ü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ı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ü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
arasında statik bağlantı oluşturur. İkincisi ise geçişli bağımlılıktır. dynamic_dep
bar_shared
tarafından zaten dinamik olarak sağlandığı için bar
bağlantısı eklenmez.
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ı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 hedefin de dışa aktarıldığı varsayılır.
Örnekteki her cc_library
en fazla bir cc_shared_library
içinde görünmelidir. baz
öğesini de bar_shared
alanına bağlamak isteseydik tags = ["LINKABLE_MORE_THAN_ONCE"]
öğesini baz
öğesine eklememiz gerekirdi.
shared_lib_name
özelliği nedeniyle, bar_shared
tarafından üretilen dosyanın adı Linux'da varsayılan olarak libbar.so
yerine bar.so
olur.
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ığıyla hedef oluşturduğunuzda ortaya çıkar. 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 aktarma işlemiyle ilgili hataya benzer.
Bu sorunu düzeltmenin bir yolu, kitaplığı cc_shared_library
bağımlılıkları arasından birine bağlamayı durdurmaktır. Aynı zamanda, kitaplığı hâlâ bağlayan kullanıcının kitaplığı dışa aktarması gerekir. Böylece, kitaplığı bağlamayan kullanıcı simgelere erişmeye devam edebilir. Hedefi dışa aktaran üçüncü bir kitaplık da kullanabilirsiniz.
Üçüncü yöntem, soruna neden olan cc_library
öğesini LINKABLE_MORE_THAN_ONCE
ile etiketlemektir. Ancak bu düzeltme nadiren kullanılmalıdır ve cc_library
öğesinin birden fazla kez bağlantı vermenin güvenli olduğundan emin olmanız gerekir.
'//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
'a bağlı olduğu ve dışa aktarılmadığı anlamına gelir.
Çözüm, cc_shared_library
bağımlılığından dışa aktarmak veya dışa aktaran üçüncü bir cc_shared_library
'ü kullanmaktır.
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
hedefine statik olarak bağlanması gerekmez ve bağlanamaz. Bu nedenle, cc_shared_library
'daki deps
bölümüne ait değildir. Bu önceden derlenmiş dinamik kitaplık, cc_libraries
'lerinizden birinin bağımlılığıysa cc_library
'un 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.
Bunu düzeltmek için hedefi deps
'ten kaldırın ve dinamik bağımlılıktan yararlanın veya exports_filter
'ın bu hedefi yakalamadığından emin olun.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiketler 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ı, birden fazla
Uygulama, aynı kitaplık birden fazla |
additional_linker_inputs
|
Etiket listesi; varsayılan user_link_flags özelliği aracılığıyla yapabilirsiniz.
|
dynamic_deps
|
Etiket listesi; varsayılan 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 kenarı eklemediğini, bunun yerine bağımlılık kenarının Aşağıdaki söz dizimine izin verilir: foo/BUILD'deki tüm hedefleri hesaba katmak için foo/BUILD içindeki herhangi bir hedefi veya foo/ bar/BUILD gibi foo/altındaki başka bir paketi 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ığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
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 bir mutlak yoldaki FDO önceden 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; gerekli Bu hedef için benzersiz bir ad. |
profile
|
Etiket; varsayılan değer |
fdo_profile
Kural kaynağını gösterfdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Workspace'te veya belirtilen mutlak bir 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)
Workspace'te veya belirtilen mutlak bir 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österpropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Workspace'te 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
|
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, gcc kurallarına uygun olarak farklı programlama dillerini belirtir. |
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 |
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, tanımlama değerlerini local_defines yerine ekleyin.
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" yerine koyma işlemine tabidir.
Her dize, Ü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 'e eklenir.
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
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 ile başa eklenir ve bu hedefin derleme komut satırına eklenir ancak bağımlılarına eklenmez.
|
malloc
|
Etiket; varsayılan değer
Varsayılan olarak C++ ikili dosyaları |
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil), bu kuralı derlemek için COPTS öğesinden kaldırılacak.
Bu özelliğe nadiren ihtiyaç duyulur.
|
stamp
|
Tam sayı; varsayılan değer
Damgalanmış 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ığı bağlarken simgeleri 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)
C++ araç zincirini temsil eder.
Bu kural aşağıdakilerden sorumludur:
-
C++ işlemlerinin çalıştırılması için gereken tüm yapıları toplama. Bu,
all_files
,compiler_files
,linker_files
veya_files
ile biten diğer özellikler gibi özelliklerle yapılır. Bunlar genellikle gerekli tüm dosyaları gruplandıran dosya grupları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çim dokümanları için bu
sayfada
da bilgi bulabilirsiniz.
bazel build //...
çağrılırken araç zincirlerinin gereksiz yere oluşturulmasını ve yapılandırılmasını önlemek için tags = ["manual"]
kullanın
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli 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 gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
as_files
|
Etiket; varsayılan değer Derleme işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
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
|
Label; 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 anahtar, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde kullanılır ve bağımlılıkları dinamik olarak bağlarız. |
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ı içeren koleksiyon. |
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 Sarma işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
supports_header_parsing
|
Boole; varsayılan değer |
supports_param_files
|
Boole; varsayılan değer |
toolchain_config
|
Label; zorunlu cc_toolchain_config_info sağlayan kuralın etiketi.
|
toolchain_identifier
|
Dize; yapılandırılamaz; varsayılan değer
#5380 sorunu düzeltilene kadar |
cc_toolchain_suite
Kural kaynağını göstercc_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:
- İlgili tüm C++ araç zincirlerini toplama
-
Bazel'a iletilen
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri belirlemek.
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>" veya "<cpu>|<compiler>" dizelerinicc_toolchain etiketiyle eşleyen bir harita. "<cpu>", Bazel'a yalnızca --cpu iletildiğinde ve "<cpu>|<derleyici>", Bazel'a hem --cpu hem de --compiler geçirildiğinde 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", }, ) |