Kurallar
- cc_binary
- cc_import
- cc_library
- cc_proto_library
- cc_shared_library
- cc_static_library
- fdo_prefetch_hints
- fdo_profile
- memprof_profile
- propeller_optimize
- cc_test
- cc_toolchain
- cc_toolchain_suite
cc_binary
Kural kaynağını görüntü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
|
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
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.
|
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 programları |
linkopts
|
Dize listesi; varsayılan değer LINKOPTS 'e eklenir.
Bu listedeki |
linkshared
|
Boole; yapılandırılamaz; varsayılan değer linkshared=True özelliğini 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 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 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 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ö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, )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
(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, )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
|
Etiket listesi; varsayılan 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ş bırakılmalı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. 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
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ı 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 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
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; 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 kurallar. Farklı uzantılar, gcc sözleşmesine göre farklı programlama dillerini gösterir. |
hdrs
|
Etiket listesi; varsayılan 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 istemcisi tarafından eklenmesi amaçlanmayan başlıklar, yayınlanan bir üstbilgide yer alıyor olsalar 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 içinde listelenen dosyaların tüm nesne dosyalarına bağlantı verir.
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.
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 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 '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 bağlı kalmaya devam eder.
Ş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, Başlıklar, src'lere veya hdrs'lara eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar 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 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.
|
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. Mutlak bir yol ise depoya göreli yol olarak anlaşılır.
|
textual_hdrs
|
Etiketler listesi; varsayılan değer Bu, tek başına derlenemeyen başlık dosyalarının tanımlandığı yerdir. Yani, geçerli kod oluşturmak için her zaman diğer kaynak dosyaları tarafından metinsel olarak dahil edilmeleri gerekir. |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
cc_proto_library
Kural kaynağını görüntülecc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library
, .proto
dosyadan C++ kodu oluşturur.
deps
, proto_library
kurallarına yönlendirmelidir.
Örnek:
cc_library( name = "lib", deps = [":foo_cc_proto"], ) cc_proto_library( name = "foo_cc_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli 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şturur.
Örnek
cc_shared_library( name = "foo_shared", deps = [ ":foo", ], dynamic_deps = [ ":bar_shared", ], additional_linker_inputs = [ ":foo.lds", ], user_link_flags = [ "-Wl,--version-script=$(location :foo.lds)", ], ) cc_library( name = "foo", srcs = ["foo.cc"], hdrs = ["foo.h"], deps = [ ":bar", ":baz", ], ) cc_shared_library( name = "bar_shared", shared_lib_name = "bar.so", deps = [":bar"], ) cc_library( name = "bar", srcs = ["bar.cc"], hdrs = ["bar.h"], ) cc_library( name = "baz", srcs = ["baz.cc"], hdrs = ["baz.h"], )
Örnekte foo_shared
, foo
ve baz
'yi statik olarak bağlar. baz
, geçişli bir bağımlılıktır. 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ılması gerektiğini kontrol etmek için 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
ürününü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
öğ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 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, 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
öğ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
|
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
|
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
Herhangi bir
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. |
cc_static_library
Kural kaynağını görüntülemecc_static_library(name, deps, tags)Hedeflerin ve bunların geçişli bağımlılıklarının listesinden statik bir kitaplık oluşturur.
Elde edilen statik kitaplık, deps
içinde listelenen hedeflerin nesne dosyalarını ve geçişli bağımlılıklarını içerir. Bu işlemde PIC
nesnelerine öncelik verilir.
Çıkış grupları
linkdeps
deps
bölgesinde listelenen ve statik kitaplığa nesne dosyası katmayan ancak en az bir statik, dinamik veya arayüz kitaplığı sağlayan hedeflerin geçişli bağımlılıklarının etiketlerini içeren metin dosyası. Elde edilen statik kitaplık için bu kitaplıkların bağlantı sırasında mevcut olması gerekebilir.
linkopts
deps
dosyasında listelenen hedeflerin tüm geçişli bağımlılıklarının kullanıcı tarafından sağlanan linkopts
dosyasını içeren bir metin dosyası.
Yinelenen simgeler
Varsayılan olarak cc_static_library
kuralı, oluşturulan statik kitaplığın yinelenen simge içermediğini kontrol eder. Bu durumda derleme, yinelenen simgeleri ve bunları içeren nesne dosyalarını listeleyen bir hata mesajıyla başarısız olur.
Bu kontrol, features = ["-symbol_check"]
ayarlanarak hedef veya paket başına ya da --features=-symbol_check
üzerinden genel olarak devre dışı bırakılabilir.
symbol_check
için araç seti desteği
Bazel ile birlikte gönderilen otomatik olarak yapılandırılan C++ araç zincirleri, symbol_check
özelliğini tüm platformlarda destekler. Özel araç zincirleri, iki yöntemden biriyle bu sürüme destek ekleyebilir:
ACTION_NAMES.validate_static_library
işlemini uygulama vesymbol_check
özelliğiyle etkinleştirme. İşlemde ayarlanan araç, iki bağımsız değişkenle çağrılır: yinelenen sembolleri kontrol edecek statik kitaplık ve kontrol başarılı olursa oluşturulması gereken dosyanın yolu.symbol_check
özelliği, statik kitaplığı oluşturan işlemin yinelenen semboller söz konusu olduğunda başarısız olmasına neden olan arşivleyici işaretleri ekler.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan Nesne dosyası sağlamayan bağımlılıklar statik kitaplığa dahil edilmez ancak etiketleri, |
fdo_prefetch_hints
Kural kaynağını görüntülefdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak bir yolda bulunan bir FDO ön getirme ipucu profilini temsil eder. Örnekler:
fdo_prefetch_hints( name = "hints", profile = "//path/to/hints:profile.afdo", ) fdo_profile( name = "hints_abs", absolute_path_profile = "/absolute/path/profile.afdo", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
profile
|
Etiket; varsayılan değer |
fdo_profile
Kural kaynağını görüntülefdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak yoldaki bir FDO profilini temsil eder. Örnekler:
fdo_profile( name = "fdo", profile = "//path/to/fdo:profile.zip", ) fdo_profile( name = "fdo_abs", absolute_path_profile = "/absolute/path/profile.zip", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
absolute_path_profile
|
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ülememprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak yoldaki 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; gerekli 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. 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 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 programları |
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 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.
|
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
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ışması için gereken tüm yapılar toplanıyor. 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 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
|
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ın koleksiyonu. |
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
|
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
|
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
|
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
|
Etiket; 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örüntülecc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
C++ araç zinciri koleksiyonlarını temsil eder.
Bu kural şunlardan sorumludur:
- İlgili tüm C++ araç zincirlerini toplama
-
Bazel'e iletilen
--cpu
ve--compiler
seçeneklerine bağlı olarak bir araç zinciri seçin.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçim dokümanları için bu sayfada da bilgi bulabilirsiniz.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; zorunlu Bu hedef için benzersiz bir ad. |
toolchains
|
Dizelerin etiketlerle eşlendiği sözlük; yapılandırılamaz; zorunlu "<cpu>" 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", }, ) |