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)
Dolaylı çıkış hedefleri
name.stripped
(yalnızca açıkça istenirse derlenir): İkili programın stripped sürümü.strip -g
, hata ayıklama simgelerini kaldırmak için ikili programda ç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 talep edildiğinde oluşturulur): Fission etkinse: Uzaktan dağıtılan ikili programlarda hata ayıklamaya uygun bir hata ayıklama bilgileri paketi dosyası. Aksi takdirde: Boş bir dosya.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan 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 eklenir ve bu hedefin yanı sıra bu hedefe ve ona bağlı tüm kurallardaki derleme komut satırına 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" değişikliğine 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 programları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS bölümüne eklenir.
Bu listenin |
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ığı, bağlantı işleminin
Hem |
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: İkili 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 program veya test ise 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_import
Kural kaynağını göstercc_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
(Windows) ile bağlama
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )
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; zorunlu 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
|
Etiket listesi; varsayılan |
alwayslink
|
Boole; varsayılan değer 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. |
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ü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. 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
içindeki başlıklar yalnızca kitaplığın hdrs
ve srcs
alanındaki dosyalardan doğrudan eklenmelidir. hdrs
bölümüne mi yoksa srcs
öğesine mi başlık yerleştireceğinize karar verirken bu kitaplıktaki tüketicilerin bunu doğrudan dahil etmelerini isteyip istemediğinizi sormanız 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 arayüzü olmadığından hdrs
özelliği de yoktur. Doğrudan ikili dosyaya veya teste ait tüm üstbilgiler srcs
içinde listelenmelidir.
Bu kuralları görmek için aşağıdaki örneğe bakın.
cc_binary( name = "foo", srcs = [ "foo.cc", "foo.h", ], deps = [":bar"], ) cc_library( name = "bar", srcs = [ "bar.cc", "bar-impl.h", ], hdrs = ["bar.h"], deps = [":baz"], ) cc_library( name = "baz", srcs = [ "baz.cc", "baz-impl.h", ], hdrs = ["baz.h"], )
Bu örnekte izin verilen doğrudan dahil etmeler aşağıdaki tabloda listelenmiştir. Örneğin, foo.cc
'ün foo.h
ve bar.h
'yi doğrudan dahil etmesine izin verilir ancak baz.h
'e izin verilmez.
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 kontrolü kuralları yalnızca doğrudan dahil etmeler için geçerlidir. Yukarıdaki örnekte foo.cc
öğesinin, baz.h
değerini de içerebilen bar.h
öğesini içermesine izin verilir. Buna karşılık, baz-impl.h
öğesini de içermesine izin verilir. 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 verilmesi için baz
öğesinin, foo
öğesinin deps
öğesine eklenmesi gerekir.
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ça istenmesi (örneğin, --features=layering_check
komut satırı işareti veya package
işlevinin features
parametresi aracılığıyla) gerekir. Bazel'in sağladığı araç zincirleri, bu özelliği yalnızca Unix ve macOS'te kullanılan 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 Bunlar |
srcs
|
Etiket listesi; varsayılan 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 uygun olarak 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 üst bilgiler, kaynaklar tarafından bu kurala veya bağımlı kurallara 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 programda kod tarafından açıkça çağrılmadığında (ör. kodunuz bir hizmet tarafından sağlanan bir geri çağırmayı almak için kaydedildiyse) yararlıdır.
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. |
copts
|
Dize listesi; varsayılan değer
Bu özellikteki her dize, ikili hedef derlemeden önce
Paket, |
defines
|
Dize listesi; varsayılan değer: -D eklenir ve bu hedefin yanı sıra bu hedefe ve ona bağlı tüm kurallardaki derleme komut satırına 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.
|
implementation_deps
|
Etiketler listesi; varsayılan değer deps işlevinin aksine, bu kitaplıkların başlıkları ve yolları (ve tüm geçişli depoları) yalnızca bu kitaplığın derlenmesi için kullanılır, ona bağlı olan kitaplıklar için kullanılmaz. implementation_deps ile belirtilen kitaplıklar, bu kitaplığa bağlı olan ikili hedeflerde bağlı kalmaya devam eder.
Kullanım şimdilik cc_libraries ile sınırlıdır ve |
include_prefix
|
Dize; varsayılan değer Ayarlandığında bu kuralın
|
includes
|
Dize listesi; varsayılan değer
"Değişken yap" değişikliğine tabidir.
Her 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 gerekli olmalıdır.
|
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 program veya test ise bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
|
local_defines
|
Dize listesi; varsayılan değer -D 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 amacıyla COPTS 'ten kaldırılır.
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. Mutlaksa depoya bağlı bir yol olarak kabul edilir.
|
textual_hdrs
|
Etiketler listesi; varsayılan değer Bu, kendi başına derlanamayan üst bilgi dosyalarının bildirildiği konumdur. Diğer bir deyişle, geçerli bir kod oluşturmak için bunların her zaman diğer kaynak dosyalar tarafından metin olarak eklenmesi 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östercc_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; gerekli 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ş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
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
öğesinin 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ığı olan bir 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 birbirine bağlayan iki farklı cc_shared_library
bağımlılığıyla yeni bir cc_shared_library
oluşturduğunuzda gerçekleşir.
Dışa aktarmalardaki 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, hâlâ bağlantı verenin kitaplığı dışa aktarması gerekir. Böylece, kitaplığı bağlamayan kullanıcının simgeleri görebilir. 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 uygulanır ve cc_library
öğesini birden çok kez bağlamanın güvenli olduğundan kesinlikle emin olmanız gerekir.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Bu, deps
öğenizin geçişli olarak kapatılmasındaki bir kitaplığa, cc_shared_library
bağımlılıklarından biri olmadan ulaşılabileceği ancak dynamic_deps
içindeki farklı bir cc_shared_library
öğesine zaten 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 aktaran üçüncü bir cc_shared_library
'ı çekmektir.
Do not place libraries which only contain a precompiled dynamic library in deps.
Önceden derlenmiş bir dinamik kitaplığınız varsa bunun şu anda oluşturduğunuz geçerli 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
uygulamanızdan birinin bağımlılığıysa cc_library
öğesinin doğrudan buna 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 dışa aktarılmakta olan bir hedefi dışa aktarmayı 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ıkta hedefi kullanın veya exports_filter
öğesinin bu hedefi yakalamadığından emin olun.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan
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
|
Etiketler listesi; varsayılan değer user_link_flags özelliği ile 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 içindeki 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ığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
fdo_prefetch_hints
Kural kaynağını gösterfdo_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; 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)
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; gerekli 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östermemprof_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örüntülemepropeller_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; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan Bunlar |
srcs
|
Etiket listesi; varsayılan 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
Paket, |
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. Geniş kapsamlı etkileri olabileceği için ç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 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 programları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS bölümüne 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 varsayılan olarak
Etkinleştirilirse ve bu bir ikili program veya test ise bu seçenek, derleme aracına mümkün olduğunda kullanıcı kitaplıkları için Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:
|
local_defines
|
Dize listesi; varsayılan değer -D eklenir ve bu dizenin bağımlılarına değil, bu hedef için derleme komut satırına eklenir.
|
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östercc_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ını oluşturma. Bu işlem,
CcToolchainConfigInfo
sağlayıcısı kullanılarak gerçekleştirilir (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 belgeleri için de bu
sayfaya
bakın.
bazel build //...
çağırırken araç zincirlerinin gereksiz şekilde derlenmesini 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
|
Label; 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 Montaj işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
compiler_files
|
Label; 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 Bağlantı işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
module_map
|
Etiket; varsayılan değer |
objcopy_files
|
Label; 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 kullanılır ve bağımlılıkları statik olarak bağlarız. |
strip_files
|
Label; 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
|
Dize; yapılandırılamaz; varsayılan değer
#5380 numaralı sorun 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 aşağıdakilerden sorumludur:
- Alakalı tüm C++ araç zincirleri toplanıyor.
-
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; gerekli 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", }, ) |