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 talep edildiğinde oluşturulur): İkili programın sadeleştirilmiş bir 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 etkinleştirilirse: Uzaktan dağıtılan ikili programlarda hata ayıklamaya uygun bir hata ayıklama bilgileri paketi dosyası. Diğer: Boş 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
|
Etiket listesi; varsayılan Tüm
Tüm Bir kuralın adı
İzin verilen
...ve bu dosyaları oluşturan kurallar. Farklı uzantılar, gcc kurallarına uygun olarak farklı programlama dillerini belirtir. |
additional_linker_inputs
|
Etiket listesi; varsayılan Ö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 eklenir ve bu hedefin yanı sıra bu hedefe ve ona bağlı tüm kurallardaki derleme komut satırına 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" değişikliğine tabidir.
Her dizenin başına 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ılmamış; varsayılan değer linkshared=True özelliğini 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
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 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 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_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 bir kitaplığı bağlama (Unix)
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )3. Paylaşılan bir 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'da:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.lib", # A normal static library interface_library = "mylib.lib", # An import library for mylib.dll shared_library = "mylib.dll", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import
, "dahil et" özelliğini destekler. Örneğin:
cc_import( name = "curl_lib", hdrs = glob(["vendor/curl/include/curl/*.h"]), includes = [ "vendor/curl/include" ], shared_library = "vendor/curl/lib/.libs/libcurl.dylib", )
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
deps
|
Etiket listesi; varsayılan deps ile ilgili genel yorumlara göz atın.
|
hdrs
|
Etiket listesi; varsayılan |
alwayslink
|
Boole; varsayılan değer Her zamanlink, Windows'da bilinen bir sorun nedeniyle VS 2017 ile çalışmıyorsa lütfen 2017 sürümünüzü en son sürüme yükseltin. |
interface_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
shared_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
static_library
|
Etiket; varsayılan değer İzin verilen dosya türleri:
|
system_provided
|
Boole; varsayılan değer interface_library belirtilmeli ve shared_library boş bırakılmalıdır.
|
cc_library
Kural kaynağını göstercc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Üstbilgi 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ı 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 hdrs
ve srcs
konumundaki 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, programlama dillerinde public
ve private
görünürlüğü arasındaki kararla hemen hemen 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 programa veya teste ait olan tüm başlıklar 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
öğesinin foo.h
ve bar.h
öğelerini doğrudan içermesine izin verilir ancak baz.h
parametresi eklenemez.
Dosya dahil | İzin verilen dahil etmeler |
---|---|
foo.h | bar.h |
foo.cc | foo.h bar.h |
bar.h | bar-impl.h baz.h |
çubuk-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, .cc
dosyası derlenen işlemi, geçişli deps
kapatma işlemindeki herhangi bir cc_library
içindeki hdrs
veya srcs
içindeki başlık dosyalarını geçişli 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 verilmesi için baz
öğesinin, foo
öğesinin deps
öğesine eklenmesi gerekir.
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 bir şekilde istenmesi gerekir (ör. --features=layering_check
komut satırı işareti veya package
işlevinin features
parametresi aracılığıyla). 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; 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 kurallarına uygun olarak farklı programlama dillerini belirtir. |
hdrs
|
Etiket listesi; varsayılan 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 istemcisi tarafından eklenmesi amaçlanmayan başlıklar, yayınlanan bir üstbilgide yer alıyor olsalar bile |
additional_compiler_inputs
|
Etiket listesi; varsayılan |
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 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.
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. 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.
|
implementation_deps
|
Etiket listesi; varsayılan 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ı kitaplıklar için kullanılmaz. implementation_deps ile belirtilen kitaplıklar, bu kitaplığa dayanan 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 dizenin başına 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 bölümüne eklenir.
Bu listenin |
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: İkili 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 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.
|
nocopts
|
Dize; varsayılan değer COPTS (kuralın copts özelliğinde açıkça belirtilen değerler dahil), bu kuralı derlemek için COPTS öğesinden kaldırılacak.
Bu özelliğe nadiren ihtiyaç duyulur.
|
strip_include_prefix
|
Dize; varsayılan değer Ayarlandığında, bu kuralın Göreli bir yolsa, pakete bağlı bir yol olarak alınır. Mutlaksa depoya bağlı bir yol olarak kabul edilir.
|
textual_hdrs
|
Etiket listesi; varsayılan 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
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; 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östercc_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. Zaten dynamic_dep
bar_shared
tarafından dinamik olarak sağlandığı için bar
ile bağlantı oluşturmaz.
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
öğ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 oluşturulan dosya, Linux'ta varsayılan olarak sahip olacağı libbar.so
adının aksine bar.so
adına sahip olur.
Hatalar
Two shared libraries in dependencies export the same symbols.
Bu durum, aynı hedefi dışa aktaran iki farklı cc_shared_library
bağımlılığıyla hedef oluşturduğunuzda ortaya çıkar. Bu sorunu düzeltmek için 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 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ı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. Diğer bir yöntem de hedefi dışa aktaran üçüncü bir kitaplık kullanmaktır.
Üçü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
öğesinin deps
içine ait değil. 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
Geçerli 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 sunumların geçişli kitaplık bağımlılıkları,
Analiz sırasında kural uygulaması, birden fazla
Uygulama, aynı kitaplık birden fazla |
additional_linker_inputs
|
Etiket listesi; varsayılan user_link_flags özelliği 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 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 içindeki herhangi bir hedefi hesaba katmak için foo/BUILD içindeki herhangi bir hedefi veya foo/ bar/BUILD gibi foo/altındaki başka bir paketi hesaba katmak için |
shared_lib_name
|
Dize; varsayılan değer |
user_link_flags
|
Dize listesi; varsayılan değer: cc_shared_library( name = "foo_shared", additional_linker_inputs = select({ "//src/conditions:linux": [ ":foo.lds", ":additional_script.txt", ], "//conditions:default": []}), user_link_flags = select({ "//src/conditions:linux": [ "-Wl,-rpath,kittens", "-Wl,--version-script=$(location :foo.lds)", "-Wl,--script=$(location :additional_script.txt)", ], "//conditions:default": []}), ... ) |
win_def_file
|
Etiket; varsayılan değer Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplığı bağlarken simgeleri dışa aktarmak için kullanılabilir. |
fdo_prefetch_hints
Kural kaynağını gö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; gerekli Bu hedef için benzersiz bir ad. |
profile
|
Etiket; varsayılan değer |
fdo_profile
Kural kaynağını gösterfdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Ç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; 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)
Ç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; gerekli Bu hedef için benzersiz bir ad. |
absolute_path_profile
|
Dize; varsayılan değer |
profile
|
Etiket; varsayılan değer |
propeller_optimize
Kural kaynağını gösterpropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanındaki bir Pervane 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; gerekli Bu hedef için benzersiz bir ad. |
ld_profile
|
Etiket; varsayılan değer |
cc_test
Kural kaynağını göstercc_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 kurallar. Farklı uzantılar, gcc kurallarına uygun olarak farklı programlama dillerini belirtir. |
additional_linker_inputs
|
Etiket listesi; varsayılan Ö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 eklenir ve bu hedefin yanı sıra bu hedefe ve ona bağlı tüm kurallardaki derleme komut satırına 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" değişikliğine tabidir.
Her dizenin başına 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 |
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
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 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 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ö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 şunlardan sorumludur:
-
C++ işlemlerinin çalışması için gereken tüm yapılar toplanıyor. 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ı 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ılar, rules_cc ile ilgili tüm işlemlere giriş olarak eklenir (aşağıdaki özelliklerden daha hassas yapı grupları 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ın koleksiyonu. |
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ın koleksiyonu. |
compiler_files_without_includes
|
Etiket; varsayılan değer |
coverage_files
|
Etiket; varsayılan değer |
dwp_files
|
Label; zorunlu Dwp işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. |
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 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ın koleksiyonu. |
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
|
Label; zorunlu cc_toolchain_config_info özelliğini sağlayan kuralın etiketi.
|
toolchain_identifier
|
Dize; yapılandırılmamış; 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 şunlardan 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 belgeleri için de bu sayfaya bakın.
Bağımsız değişkenler
Özellikler | |
---|---|
name |
Ad; gerekli Bu hedef için benzersiz bir ad. |
toolchains
|
Sözlük dizelerini etiketlere eşleme; nonconfigured; gerekli "<cpu>" veya "<cpu>|<derleyici>" dizelerinden bircc_toolchain etiketine sahip 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", }, ) |