Kurallar
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
Kural kaynağını görüntülecc_binary(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, includes, licenses, link_extra_lib, linkopts, linkshared, linkstatic, local_defines, malloc, nocopts, output_licenses, restricted_to, stamp, tags, target_compatible_with, testonly, toolchains, visibility, win_def_file)
Örtülü çıkış hedefleri
name.stripped
(yalnızca açıkça 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. Komut satırında--stripopt=-foo
kullanılarak 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ı. Aksi takdirde: Boş bir dosya.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiketler listesi; varsayılan değer 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 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 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, Ü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 |
linkshared
|
Boole; yapılandırılmamış; 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 programları boş bir kitaplık olan |
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
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_import
Kural kaynağını görüntülecc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
cc_import
kuralları, kullanıcıların önceden derlenmiş C/C++ kitaplıklarını içe aktarmasına olanak tanır.
Tipik kullanım alanları şunlardır:
1. Statik kitaplık bağlama
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", # If alwayslink is turned on, # libmylib.a will be forcely linked into any binary that depends on it. # alwayslink = 1, )2. Paylaşılan kitaplık bağlama (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. Paylaşılan kitaplığı arayüz kitaplığına bağlama (Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )4. Paylaşılan bir kitaplığı
system_provided=True
ile bağlama (Windows)
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll is provided by system environment, for example it can be found in PATH. # This indicates that Bazel is not responsible for making mylib.dll available. system_provided = 1, )5. Statik veya paylaşılan kitaplığa bağlama
Unix'te:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )Windows'ta:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.lib", # A normal static library interface_library = "mylib.lib", # An import library for mylib.dll shared_library = "mylib.dll", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import
, dahil et özelliğini destekler. Ö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
|
Etiketler listesi; varsayılan değer |
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ülecc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Başlık dahil etme kontrolü
Derlemede kullanılan tüm başlık dosyaları, cc_*
kurallarının hdrs
veya srcs
bölümünde tanımlanmalıdır. Zorunlu kılınır.
cc_library
kuralları için hdrs
içindeki başlıklar, kitaplığın herkese açık arayüzünü oluşturur ve hem kitaplığın hdrs
hem de srcs
alanındaki dosyalardan ve ayrıca kitaplığı deps
öğelerinde listeleyen cc_*
kuralının srcs
ve hdrs
dosyalarından doğrudan eklenebilir.
srcs
içindeki başlıklar yalnızca kitaplığın hdrs
ve srcs
içindeki 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 denetimi kurallarını uygulamak için araç zinciri desteğine bağlıdır.
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 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 kurallarına uygun olarak farklı programlama dillerini belirtir. |
hdrs
|
Etiketler listesi; varsayılan değer Kitaplığın arayüzünü tanımlayan başlık dosyalarını bildirmek için tercih edilen konum budur. 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
|
Etiketler listesi; varsayılan değer Ö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 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. 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
|
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 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" 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. |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS 'e eklenir.
Bu listedeki |
linkstamp
|
Etiket; varsayılan değer base paketinde ihtiyaç duyulur.
|
linkstatic
|
Boole; varsayılan değer cc_binary ve cc_test için: ikili dosyayı statik modda bağlayın. cc_library.linkstatic için: Aşağıya bakın.
Bu seçenek
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 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, tek başına derlenemeyen başlık dosyalarının tanımlandığı yerdir. Yani, geçerli kod oluşturmak için her zaman diğer kaynak dosyaları tarafından metinsel olarak dahil edilmeleri gerekir. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_proto_library
Kural kaynağını görüntülecc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
, .proto
dosyalarından C++ kodu oluşturur.
deps
, proto_library
kuralına işaret etmelidir.
Örnek:
cc_library( name = "lib", deps = [":foo_cc_proto"], ) cc_proto_library( name = "foo_cc_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan proto_library kurallarının listesi.
|
cc_shared_library
Kural kaynağını görüntülecc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Paylaşılan bir kitaplık oluşturulur.
Örnek
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
Örnekte foo_shared
, foo
ve baz
'yi statik olarak bağlar. baz
, geçişli bir bağımlılıktır. 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 simgelerin dışa aktarılacağını kontrol etmez. Yalnızca iki paylaşılan kitaplığın aynı hedefleri dışa aktarması durumunda analiz aşamasında hata vermek için dışa aktarılacağı varsayılan öğeler kullanılı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
öğesinin foo_shared
tarafından dışa aktarılacağı 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
'ü bar_shared
'a da bağlamak isteseydik tags = ["LINKABLE_MORE_THAN_ONCE"]
'yi baz
'e 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 cc_shared_library
bağımlıları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ığı 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, 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ü 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
öğesinin deps
içine ait değil. 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 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
'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
|
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 aracılığıyla yapabilirsiniz.
|
dynamic_deps
|
Etiketler listesi; varsayılan değer cc_shared_library bağımlılıklarıdır.
|
exports_filter
|
Dize listesi; varsayılan değer
Paylaşılan kitaplık tarafından dışa aktarıldığı anlaşılan tüm hedefler
Bu özelliğin bu hedeflere 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 tüm hedefleri 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ülefdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak bir yolda bulunan bir FDO ön getirme ipucu profilini temsil eder. Örnekler:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; varsayılan değer |
fdo_profile
Kural kaynağını görüntülefdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
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ö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ülepropeller_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ülecc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, link_extra_lib, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
deps
|
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 derlenmeden ö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 alanına değer tanımlayı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. |
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 listenin |
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 programları boş bir kitaplık olan |
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
Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_toolchain
Kural kaynağını görüntülecc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
C++ araç zincirini temsil eder.
Bu kural aşağıdakilerden sorumludur:
-
C++ işlemlerinin çalıştırılması için gereken tüm yapıları toplama. Bu işlem
all_files
,compiler_files
,linker_files
gibi özellikler veya_files
ile biten diğer özellikler tarafından yapılır. Bunlar, gerekli tüm dosyaları globbing için en yaygın 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 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; zorunlu Bu hedef için benzersiz bir ad. |
all_files
|
Etiket; zorunlu Tüm cc_toolchain yapılarının koleksiyonu. Bu yapı taşları, rules_cc ile ilgili tüm işlemlere giriş olarak eklenir (aşağıdaki özelliklerden daha hassas yapı taşı kümeleri kullanan işlemler hariç). Bazel,all_files öğesinin yapı sağlayan diğer tüm özelliklerin üst kümesi olduğunu varsayar (ör. linkstamp derlemesi, hem derleme hem de bağlantı dosyaları gerektirdiğinden all_files gerekir).
|
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ın koleksiyonu. |
compiler_files_without_includes
|
Etiket; varsayılan değer |
coverage_files
|
Etiket; varsayılan değer |
dwp_files
|
Etiket; zorunlu dwp işlemleri için gereken tüm cc_toolchain yapılarını 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
|
Label; zorunlu İşlemleri bağlamak için gereken tüm cc_toolchain yapılarını içeren koleksiyon. |
module_map
|
Etiket; varsayılan değer |
objcopy_files
|
Etiket; zorunlu Objcopy işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
static_runtime_lib
|
Etiket; varsayılan değer Bu, "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 aşağıdakilerden sorumludur:
- Alakalı tüm C++ araç zincirleri toplanıyor.
-
Bazel'e iletilen
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri seçin.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu sayfada da bilgi bulabilirsiniz.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
toolchains
|
Dizelerin etiketlerle eşlendiği sözlük; yapılandırılamaz; zorunlu "<cpu>" veya "<cpu>|<compiler>" dizelerinicc_toolchain etiketiyle eşleyen bir harita. Bazel'e yalnızca --cpu iletildiği zaman "<cpu>", Bazel'e hem --cpu hem de --compiler iletildiği zaman "<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", }, ) |