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ülemecc_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 istendiğinde oluşturulur): İkili programın çıkarılmış bir sürümü. Hata ayıklama sembollerini kaldırmak için ikili programda- strip -gçalıştırılır.- --stripopt=-fookullanı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 istenirse oluşturulur): Fission etkinse: Uzaktan dağıtılan ikili dosyaların hata ayıklaması için uygun bir hata ayıklama bilgileri paketi dosyası. Aksi takdirde: boş bir dosya.
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| deps | Etiket listesi; varsayılan değer  Bunlar  | 
| srcs | Etiket 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 kuralına uygun olarak farklı programlama dillerini gösterir. | 
| additional_linker_inputs | Etiket 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, özelliği bildiriyorsa
             | 
| defines | Dize listesi; varsayılan değer  -Dile öneklenir ve bu hedefin derleme komut satırına ve buna bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkilere neden olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde, değerlerilocal_definesöğesine ekleyin. | 
| includes | Dize listesi; varsayılan değer  
          "Değişken yap" yerine koyma işlemine tabidir.
          Her dizenin başına  Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alanda yapıldığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar. | 
| link_extra_lib | Etiket; varsayılan değer  
            Varsayılan olarak, C++ ikili dosyaları  | 
| linkopts | Dize listesi; varsayılan değer  LINKOPTSöğesine eklenir.
            Bu listede  | 
| linkshared | Boole; yapılandırılamaz; varsayılan değer  linkshared=Trueözelliğini ekleyin. Bu seçenek varsayılan olarak devre dışıdır.
          Bu işaretin varlığı, bağlantının  
          Hem  | 
| linkstatic | Boole değeri; varsayılan değer  cc_binaryvecc_testiçin: İkiliyi statik modda bağlayın.cc_library.linkstaticiçin: Aşağıya bakın.
             Bu seçenek varsayılan olarak  
             Etkinleştirilirse ve bu bir ikili veya test ise bu seçenek, 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öneki eklenir ve bu hedef için derleme komut satırına eklenir ancak bağımlılarına eklenmez. | 
| malloc | Etiket; varsayılan değer  
            Varsayılan olarak C++ ikilileri  | 
| nocopts | Dize; varsayılan değer  COPTS(kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralın derlenmesi amacıylaCOPTS'dan kaldırılır.
          Bu özelliğe nadiren ihtiyaç duyulur. | 
| stamp | Tam sayı; varsayılan değer  
 Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. | 
| win_def_file | Etiket; varsayılan değer  Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. | 
cc_import
Kural kaynağını görüntülemecc_import(name, deps, data, hdrs, alwayslink, compatible_with, deprecation, distribs, features, interface_library, licenses, restricted_to, shared_library, static_library, system_provided, tags, target_compatible_with, testonly, visibility)
cc_import kuralları, kullanıcıların önceden derlenmiş C/C++ kitaplıklarını içe aktarmasına olanak tanır.
Tipik kullanım alanları şunlardır: 
1. Statik kitaplık bağlama
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", # If alwayslink is turned on, # libmylib.a will be forcely linked into any binary that depends on it. # alwayslink = 1, )
cc_import( name = "mylib", hdrs = ["mylib.h"], shared_library = "libmylib.so", )
cc_import( name = "mylib", hdrs = ["mylib.h"], # mylib.lib is an import library for mylib.dll which will be passed to linker interface_library = "mylib.lib", # mylib.dll will be available for runtime shared_library = "mylib.dll", )
system_provided=True 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, )
Unix'te:
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.a", shared_library = "libmylib.so", ) # first will link to libmylib.a cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to libmylib.so cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import( name = "mylib", hdrs = ["mylib.h"], static_library = "libmylib.lib", # A normal static library interface_library = "mylib.lib", # An import library for mylib.dll shared_library = "mylib.dll", ) # first will link to libmylib.lib cc_binary( name = "first", srcs = ["first.cc"], deps = [":mylib"], linkstatic = 1, # default value ) # second will link to mylib.dll through mylib.lib cc_binary( name = "second", srcs = ["second.cc"], deps = [":mylib"], linkstatic = 0, )
cc_import, include ö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 değer  depshakkındaki genel yorumları Çoğu derleme kuralı tarafından tanımlanan
        tipik özellikler bölümünde bulabilirsiniz. | 
| hdrs | Etiket listesi; varsayılan değer  | 
| alwayslink | Boole değeri; varsayılan değer  Alwayslink, Windows'da VS 2017 ile çalışmıyorsa bu durum bilinen bir sorundan kaynaklanmaktadır. 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 değeri; varsayılan değer  interface_librarybelirtilmeli veshared_libraryboş olmalıdır. | 
cc_library
Kural kaynağını görüntülemecc_library(name, deps, srcs, data, hdrs, additional_compiler_inputs, additional_linker_inputs, alwayslink, compatible_with, copts, defines, deprecation, distribs, exec_compatible_with, exec_properties, features, implementation_deps, include_prefix, includes, licenses, linkopts, linkstamp, linkstatic, local_defines, nocopts, restricted_to, strip_include_prefix, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, win_def_file)
Üstbilgi ekleme kontrolü
  Derlemede kullanılan tüm başlık dosyaları hdrs veya cc_* kurallarının srcs bölümünde bildirilmelidir. Bu ayar zorunlu kılındı.
  cc_library kuralları için hdrs içindeki başlıklar, kitaplığın herkese açık arayüzünü oluşturur ve hem hdrs içindeki dosyalardan hem de kitaplığın kendisinin srcs'sinden doğrudan dahil edilebilir. Ayrıca, kitaplığı deps'lerinde listeleyen cc_* kurallarının hdrs ve srcs'sindeki dosyalardan da dahil edilebilir.
  srcs içindeki başlıklar yalnızca hdrs ve kitaplığın srcs içindeki dosyalardan doğrudan eklenmelidir. Bir başlığı hdrs veya srcs içine yerleştirip yerleştirmeyeceğinize karar verirken bu kitaplığın tüketicilerinin başlığı doğrudan ekleyebilmesini isteyip istemediğinizi göz önünde bulundurmalısınız. Bu, programlama dillerinde public ve private görünürlüğü arasındaki karara benzer.
  cc_binary ve cc_test kurallarının dışa aktarılmış bir arayüzü yoktur. Bu nedenle, hdrs özelliği de yoktur. Doğrudan ikiliye veya teste ait tüm başlıklar srcs içinde listelenmelidir.
Bu kuralları göstermek 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 eklemeler aşağıdaki tabloda listelenmiştir. Örneğin, foo.cc, foo.h ve bar.h değerlerini doğrudan içerebilir ancak baz.h değerini içeremez.
| Dosya dahil | İzin verilen eklemeler | 
|---|---|
| foo.h | bar.h | 
| foo.cc | foo.h bar.h | 
| bar.h | bar-impl.h baz.h | 
| bar-impl.h | bar.h baz.h | 
| bar.cc | bar.h bar-impl.h baz.h | 
| baz.h | baz-impl.h | 
| baz-impl.h | baz.h | 
| baz.cc | baz.h baz-impl.h | 
  Dahil etme kontrolü kuralları yalnızca doğrudan dahil etmeler için geçerlidir. Yukarıdaki örnekte foo.cc, bar.h'u içerebilir. bar.h, baz.h'yi içerebilir. baz.h ise baz-impl.h'ü içerebilir. Teknik olarak, bir .cc dosyasının derlenmesi, geçişli deps kapanışındaki herhangi bir cc_library içinde hdrs veya srcs'deki herhangi bir başlık dosyasını geçişli olarak içerebilir. Bu durumda derleyici, foo.cc derlenirken baz.h ve baz-impl.h değerlerini okuyabilir ancak foo.cc, #include "baz.h" değerini içermemelidir. Buna izin verilebilmesi için baz, foo adlı deps'ye eklenmelidir.
  Bazel, dahil etme kontrolü kurallarını uygulamak için araç zinciri desteğine bağlıdır.
  layering_check özelliği, araç zinciri tarafından desteklenmeli ve açıkça istenmelidir. Örneğin, --features=layering_check komut satırı işareti veya package işlevinin features parametresi aracılığıyla istenebilir. 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 | Etiket listesi; varsayılan değer  Bunlar  | 
| srcs | Etiket 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 kuralına uygun olarak farklı programlama dillerini gösterir. | 
| hdrs | Etiket listesi; varsayılan değer  Bu, kitaplığın arayüzünü açıklayan başlık dosyalarını bildirmek için kesinlikle tercih edilen konumdur. Bu üstbilgiler, bu kuraldaki veya bağımlı kurallardaki kaynaklar tarafından dahil edilmek üzere kullanılabilir.
             Bu kitaplığın bir istemcisi tarafından dahil edilmesi amaçlanmayan üstbilgiler, yayınlanmış bir üstbilgi tarafından dahil edilmiş olsalar bile bunun yerine  | 
| additional_compiler_inputs | Etiket listesi; varsayılan değer  | 
| additional_linker_inputs | Etiket listesi; varsayılan değer  Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir. | 
| alwayslink | Boole değeri; varsayılan değer  srcsiçinde listelenen dosyaların tüm nesne dosyalarında bağlantı oluşturur.
        Bu, kodunuz ikilideki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz, bir hizmet tarafından sağlanan geri çağırma işlemini almak için kaydediliyorsa) kullanışlıdır.Alwayslink, Windows'da VS 2017 ile çalışmıyorsa bu durum bilinen bir sorundan kaynaklanmaktadır. 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  
            Paket, özelliği bildiriyorsa
             | 
| defines | Dize listesi; varsayılan değer  -Dile öneklenir ve bu hedefin derleme komut satırına ve buna bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkilere neden olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde, değerlerilocal_definesöğesine ekleyin. | 
| implementation_deps | Etiket listesi; varsayılan değer  deps'dan farklı olarak, bu kitaplıkların (ve tüm geçişli bağımlılıklarının) başlıkları ve dahil etme yolları yalnızca bu kitaplığın derlenmesi için kullanılır ve kendisine bağlı olan kitaplıklar için kullanılmaz.implementation_depsile belirtilen kitaplıklar, bu kitaplığa bağlı ikili hedeflerde hâlâ bağlantılıdır.Şu an için kullanım, cc_libraries ile sınırlıdır ve  | 
| include_prefix | Dize; varsayılan değer  Ayarlanmışsa 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 dizenin başına  Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alanda yapıldığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar. | 
| linkopts | Dize listesi; varsayılan değer  LINKOPTSöğesine eklenir.
            Bu listede  | 
| linkstamp | Etiket; varsayılan değer  basepaketinde kullanılması gerekir. | 
| linkstatic | Boole değeri; varsayılan değer  cc_binaryvecc_testiçin: İkiliyi statik modda bağlayın.cc_library.linkstaticiçin: Aşağıya bakın.
             Bu seçenek varsayılan olarak  
             Etkinleştirilirse ve bu bir ikili veya test ise bu seçenek, 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öneki eklenir ve bu hedef için 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ın derlenmesi amacıylaCOPTS'dan 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 yol ise paketle ilgili bir yol olarak kabul edilir. Mutlak bir yol ise depoya göreli yol olarak anlaşılır. 
 | 
| textual_hdrs | Etiket listesi; varsayılan değer  Bu konum, kendi başlarına derlenemeyen başlık dosyalarını bildirmek için kullanılır. Bu dosyalar, geçerli kod oluşturmak için her zaman diğer kaynak dosyalar tarafından metin olarak dahil edilmelidir. | 
| 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ık bağlanırken sembolleri dışa aktarmak için kullanılabilir. | 
cc_proto_library
Kural kaynağını görüntülemecc_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
cc_proto_library, .proto dosyalarından C++ kodu oluşturur.
deps, proto_library
 kurallarını 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 değer  proto_librarykurallarının listesi. | 
cc_shared_library
Kural kaynağını görüntülemecc_shared_library(name, deps, additional_linker_inputs, dynamic_deps, exports_filter, shared_lib_name, tags, user_link_flags, win_def_file)
Paylaşılan bir kitaplık oluşturur.
Örnek
cc_shared_library(
    name = "foo_shared",
    deps = [
        ":foo",
    ],
    dynamic_deps = [
        ":bar_shared",
    ],
    additional_linker_inputs = [
        ":foo.lds",
    ],
    user_link_flags = [
        "-Wl,--version-script=$(location :foo.lds)",
    ],
)
cc_library(
    name = "foo",
    srcs = ["foo.cc"],
    hdrs = ["foo.h"],
    deps = [
        ":bar",
        ":baz",
    ],
)
cc_shared_library(
    name = "bar_shared",
    shared_lib_name = "bar.so",
    deps = [":bar"],
)
cc_library(
    name = "bar",
    srcs = ["bar.cc"],
    hdrs = ["bar.h"],
)
cc_library(
    name = "baz",
    srcs = ["baz.cc"],
    hdrs = ["baz.h"],
)
Örnekte foo_shared, foo ve baz'yi statik olarak bağlar. baz, geçişli bir bağımlılıktır. bar, dynamic_dep bar_shared tarafından dinamik olarak sağlandığı için bağlantı oluşturulmuyor.
foo_shared, hangi sembollerin dışa aktarılacağını kontrol etmek için bir bağlayıcı komut dosyası *.lds dosyası kullanır. cc_shared_library Kural mantığı, hangi sembollerin dışa aktarılacağını kontrol etmez. Yalnızca, iki paylaşılan kitaplık aynı hedefleri dışa aktarıyorsa analiz aşamasında hatalar vermek için dışa aktarıldığı varsayılanı kullanır.
cc_shared_library öğesinin 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ıldığı varsayılmaz. exports_filter ile eşleşen her hedef de dışa aktarılmış olarak kabul edilir.
Örnekteki her bir cc_library en fazla bir cc_shared_library içinde görünmelidir. baz öğesini de bar_shared öğesine bağlamak istersek baz öğesine tags = ["LINKABLE_MORE_THAN_ONCE"] eklememiz gerekir.
shared_lib_name özelliği nedeniyle, bar_shared tarafından oluşturulan dosya, Linux'ta varsayılan olarak sahip olacağı libbar.so adı yerine bar.so adını alır.
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ıkla hedef oluşturduğunuzda meydana gelir. Bu sorunu düzeltmek için cc_shared_library bağımlılıkları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ığına sahip yeni bir cc_shared_library oluşturduğunuzda ortaya çıkar.
Dışa aktarma hatalarına benzer.
Bu sorunu düzeltmenin bir yolu, kitaplığın cc_shared_library bağımlılıklarından birine bağlanmasını durdurmaktır. Aynı zamanda, kitaplığı bağlamaya devam eden kullanıcının, kitaplığı dışa aktarması gerekir. Böylece, kitaplığı bağlamayan kullanıcı sembolleri görmeye devam edebilir. Bir diğer yöntem ise hedefi dışa aktaran üçüncü bir kitaplığı kullanmaktır.
Üçüncü bir yöntem ise cc_library öğesini LINKABLE_MORE_THAN_ONCE ile etiketlemektir. Ancak bu düzeltme nadiren kullanılmalı ve cc_library öğesinin birden fazla kez bağlanmanın güvenli olduğundan kesinlikle emin olmalısınız.
'//foo:foo' is already linked statically in '//bar:bar' but not exported`
Bu, deps öğenizin geçişli kapanımındaki bir kitaplığa cc_shared_library bağımlılıklarından birinden geçmeden ulaşılabildiği ancak bu kitaplığın dynamic_deps içinde farklı bir cc_shared_library öğesine zaten bağlandığı ve dışa aktarılmadığı anlamına gelir.
Çözüm, bağımlılıktan dışa aktarmak veya dışa aktaran üçüncü bir cc_shared_library çekmektir.cc_shared_library
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 hedefiyle statik olarak bağlanması gerekmez ve bağlanamaz. Bu nedenle, deps cc_shared_library'e ait değildir. Bu önceden derlenmiş dinamik kitaplık, cc_libraries öğelerinizden birinin bağımlılığıysa cc_library öğesinin 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.
Bu sorunu düzeltmek için hedefi deps öğesinden kaldırın ve yalnızca dinamik bağımlılıktan yararlanın veya exports_filter öğesinin 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 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ı, aynı hedefleri birden fazla  
        Aynı kitaplık birden fazla  | 
| additional_linker_inputs | Etiket listesi; varsayılan değer  user_link_flagsözelliği aracılığıyla yapabilirsiniz. | 
| dynamic_deps | Etiket listesi; varsayılan değer  cc_shared_librarybağımlılıklarıdır.
         | 
| exports_filter | Dize listesi; varsayılan değer  
        Herhangi bir hedef  
        Bu özniteliğin, bu hedeflere aslında 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 herhangi bir hedefi hesaba katmak için  
 | 
| shared_lib_name | Dize; varsayılan değer  | 
| user_link_flags | Dize listesi; varsayılan değer  
         cc_shared_library(
            name = "foo_shared",
            additional_linker_inputs = select({
              "//src/conditions:linux": [
                ":foo.lds",
                ":additional_script.txt",
              ],
              "//conditions:default": []}),
            user_link_flags = select({
              "//src/conditions:linux": [
                "-Wl,-rpath,kittens",
                "-Wl,--version-script=$(location :foo.lds)",
                "-Wl,--script=$(location :additional_script.txt)",
              ],
              "//conditions:default": []}),
              ...
         )
         | 
| win_def_file | Etiket; varsayılan değer  Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. | 
cc_static_library
Kural kaynağını görüntülemecc_static_library(name, deps, tags)
Elde edilen statik kitaplık, deps içinde listelenen hedeflerin nesne dosyalarını ve geçişli bağımlılıklarını içerir. PIC nesnelerine öncelik verilir.
Çıkış grupları
linkdeps
deps içinde listelenen hedeflerin, statik kitaplığa herhangi bir nesne dosyası katkısında bulunmayan ancak en az bir statik, dinamik veya arayüz kitaplığı sağlayan geçişli bağımlılıklarının etiketlerini içeren bir metin dosyası. Elde edilen statik kitaplığın, bağlantı zamanında bu kitaplıkların kullanılabilir olmasını gerektirebilir.
linkopts
linkopts içinde listelenen hedeflerin tüm geçişli bağımlılıklarının kullanıcı tarafından sağlanan linkopts değerini içeren bir metin dosyası.deps
Yinelenen semboller
Varsayılan olarak, cc_static_library kuralı, ortaya çıkan statik kitaplığın yinelenen simge içermediğini kontrol eder. Bu durumda, derleme başarısız olur ve yinelenen sembolleri ve bunları içeren nesne dosyalarını listeleyen bir hata mesajı gösterilir.
Bu kontrol, features = ["-symbol_check"] ayarlanarak hedef veya paket başına ya da --features=-symbol_check aracılığıyla genel olarak devre dışı bırakılabilir.
symbol_check için araç zinciri desteği
Bazel ile birlikte gönderilen otomatik olarak yapılandırılmış C++ araç zincirleri, tüm platformlarda symbol_check özelliğini destekler. Özel araç zincirleri, iki yöntemden birini kullanarak destek ekleyebilir:
- ACTION_NAMES.validate_static_libraryişlemini uygulama ve- symbol_checközelliğiyle etkinleştirme. İşlemde ayarlanan araç, iki bağımsız değişkenle çağrılır: yinelenen sembollerin kontrol edileceği statik kitaplık ve kontrol başarılı olursa oluşturulması gereken bir dosyanın yolu.
- symbol_checközelliğinin, statik kitaplık oluşturma işleminin yinelenen sembollerde başarısız olmasına neden olan arşivleyici işaretleri eklemesi.
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| deps | Etiket listesi; varsayılan değer  Herhangi bir nesne dosyası sağlamayan bağımlılıklar statik kitaplığa dahil edilmez ancak etiketleri  | 
fdo_prefetch_hints
Kural kaynağını görüntülemefdo_prefetch_hints(name, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak yolda bulunan bir FDO önceden getirme ipuçları profilini temsil eder. Örnekler:
fdo_prefetch_hints(
    name = "hints",
    profile = "//path/to/hints:profile.afdo",
)
fdo_profile(
  name = "hints_abs",
  absolute_path_profile = "/absolute/path/profile.afdo",
)
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| profile | Etiket; varsayılan değer  | 
fdo_profile
Kural kaynağını görüntülemefdo_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, proto_profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak yolda bulunan bir FDO profilini temsil eder. Örnekler:
fdo_profile(
    name = "fdo",
    profile = "//path/to/fdo:profile.zip",
)
fdo_profile(
  name = "fdo_abs",
  absolute_path_profile = "/absolute/path/profile.zip",
)
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| absolute_path_profile | Dize; varsayılan değer  | 
| profile | Etiket; varsayılan değer  | 
| proto_profile | Etiket; varsayılan değer  | 
memprof_profile
Kural kaynağını görüntülemememprof_profile(name, absolute_path_profile, compatible_with, deprecation, distribs, features, licenses, profile, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanında veya belirtilen mutlak yolda bulunan bir MEMPROF profilini temsil eder. Örnekler:
memprof_profile(
    name = "memprof",
    profile = "//path/to/memprof:profile.afdo",
)
memprof_profile(
  name = "memprof_abs",
  absolute_path_profile = "/absolute/path/profile.afdo",
)
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| absolute_path_profile | Dize; varsayılan değer  | 
| profile | Etiket; varsayılan değer  | 
propeller_optimize
Kural kaynağını görüntülemepropeller_optimize(name, compatible_with, deprecation, distribs, features, ld_profile, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Çalışma alanındaki bir Propeller optimizasyon profilini temsil eder. Örnek:
propeller_optimize(
    name = "layout",
    cc_profile = "//path:cc_profile.txt",
    ld_profile = "//path:ld_profile.txt"
)
propeller_optimize(
    name = "layout_absolute",
    absolute_cc_profile = "/absolute/cc_profile.txt",
    absolute_ld_profile = "/absolute/ld_profile.txt"
)
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| ld_profile | Etiket; varsayılan değer  | 
cc_test
Kural kaynağını görüntülemecc_test(name, deps, srcs, data, additional_linker_inputs, args, compatible_with, copts, defines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, includes, licenses, link_extra_lib, linkopts, linkstatic, local, local_defines, malloc, nocopts, restricted_to, shard_count, size, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility, win_def_file)
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| deps | Etiket listesi; varsayılan değer  Bunlar  | 
| srcs | Etiket 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 kuralına uygun olarak farklı programlama dillerini gösterir. | 
| additional_linker_inputs | Etiket 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, özelliği bildiriyorsa
             | 
| defines | Dize listesi; varsayılan değer  -Dile öneklenir ve bu hedefin derleme komut satırına ve buna bağlı olan her kurala eklenir. Bu işlem, geniş kapsamlı etkilere neden olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde, değerlerilocal_definesöğesine ekleyin. | 
| includes | Dize listesi; varsayılan değer  
          "Değişken yap" yerine koyma işlemine tabidir.
          Her dizenin başına  Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alanda yapıldığında (varsayılan) bağımlı kurallar tarafından kullanılamazlar. | 
| link_extra_lib | Etiket; varsayılan değer  
            Varsayılan olarak, C++ ikili dosyaları  | 
| linkopts | Dize listesi; varsayılan değer  LINKOPTSöğesine eklenir.
            Bu listede  | 
| linkstatic | Boole değeri; varsayılan değer  cc_binaryvecc_testiçin: İkiliyi statik modda bağlayın.cc_library.linkstaticiçin: Aşağıya bakın.
             Bu seçenek varsayılan olarak  
             Etkinleştirilirse ve bu bir ikili veya test ise bu seçenek, 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öneki eklenir ve bu hedef için derleme komut satırına eklenir ancak bağımlılarına eklenmez. | 
| malloc | Etiket; varsayılan değer  
            Varsayılan olarak C++ ikilileri  | 
| nocopts | Dize; varsayılan değer  COPTS(kuralın copts özelliğinde açıkça belirtilen değerler dahil) bu kuralın derlenmesi amacıylaCOPTS'dan kaldırılır.
          Bu özelliğe nadiren ihtiyaç duyulur. | 
| stamp | Tam sayı; varsayılan değer  
 Damgalı ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz. | 
| win_def_file | Etiket; varsayılan değer  Bu özellik yalnızca hedef platform Windows olduğunda kullanılmalıdır. Paylaşılan bir kitaplık bağlanırken sembolleri dışa aktarmak için kullanılabilir. | 
cc_toolchain
Kural kaynağını görüntülemecc_toolchain(name, all_files, ar_files, as_files, compatible_with, compiler_files, compiler_files_without_includes, coverage_files, deprecation, distribs, dwp_files, dynamic_runtime_lib, exec_transition_for_inputs, features, libc_top, licenses, linker_files, module_map, objcopy_files, restricted_to, static_runtime_lib, strip_files, supports_header_parsing, supports_param_files, tags, target_compatible_with, testonly, toolchain_config, toolchain_identifier, visibility)
Bir C++ araç zincirini temsil eder.
Bu kural şunlardan sorumludur:
- 
      C++ işlemlerinin çalışması için gereken tüm yapıları toplar. Bu işlem, all_files,compiler_files,linker_filesveya_filesile biten diğer özellikler gibi özellikler kullanılarak yapılır. Bunlar, genellikle gerekli tüm dosyaları içeren dosya grubu glob'larıdır.
- 
      C++ işlemleri için doğru komut satırları oluşturma. Bu işlem, CcToolchainConfigInfosağlayıcısı kullanılarak yapılır (ayrıntılar aşağıda verilmiştir).
  C++ araç zincirini yapılandırmak için toolchain_config özelliğini kullanın.
  Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçimi dokümanları için bu 
    sayfaya
   da göz atın.
  bazel build //... çağrıldığında araç zincirlerinin gereksiz yere oluşturulup 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: zorunluTüm cc_toolchain yapıları koleksiyonu. Bu yapılar, tüm rules_cc ile ilgili işlemlere giriş olarak eklenir (aşağıdaki özelliklerden daha kesin yapılar kümeleri kullanan işlemler hariç). Bazel, all_files'nın diğer tüm yapı sağlayan özelliklerin üst kümesi olduğunu varsayar (ör. linkstamp derlemesi hem derleme hem de bağlantı dosyaları gerektirir, bu nedenleall_filesalır).
         | 
| ar_files | Etiket; varsayılan değer  Arşivleme işlemleri için gereken tüm cc_toolchain yapıtlarının toplanması. | 
| as_files | Etiket; varsayılan değer  Derleme işlemleri için gereken tüm cc_toolchain yapılarının toplanması. | 
| compiler_files | Etiket: zorunluDerleme işlemleri için gereken tüm cc_toolchain yapılarının toplanması. | 
| compiler_files_without_includes | Etiket; varsayılan değer  | 
| coverage_files | Etiket; varsayılan değer  | 
| dwp_files | Etiket: zorunludwp işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu. | 
| dynamic_runtime_lib | Etiket; varsayılan değer  Bu, "static_link_cpp_runtimes" özelliği etkinleştirildiğinde ve bağımlılıkları dinamik olarak bağladığımızda kullanılır. | 
| exec_transition_for_inputs | Boole değeri; varsayılan değer  | 
| libc_top | Etiket; varsayılan değer  | 
| linker_files | Etiket: zorunluBağlantı işlemleri için gereken tüm cc_toolchain yapılarının toplanması. | 
| module_map | Etiket; varsayılan değer  | 
| objcopy_files | Etiket: zorunluobjcopy işlemleri için gereken tüm cc_toolchain yapılarının toplanması. | 
| 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Şerit işlemleri için gereken tüm cc_toolchain yapılarının toplanması. | 
| supports_header_parsing | Boole değeri; varsayılan değer  | 
| supports_param_files | Boole değeri; varsayılan değer  | 
| toolchain_config | Etiket: zorunlu cc_toolchain_config_infosağlayan kuralın etiketi. | 
| toolchain_identifier | Dize; yapılandırılamaz; varsayılan değer  
          #5380 numaralı sorun düzeltilene kadar
           | 
cc_toolchain_suite
Kural kaynağını görüntülemecc_toolchain_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
C++ araç zincirleri koleksiyonunu temsil eder.
Bu kural şunlardan sorumludur:
- İlgili tüm C++ araç zincirlerini toplama
- 
      --cpuve--compilerseçeneklerine bağlı olarak bir araç zinciri seçme Bazel'e iletildi.
Ayrıntılı C++ araç zinciri yapılandırması ve araç zinciri seçimi dokümanları için bu sayfaya da göz atın.
Bağımsız değişkenler
| Özellikler | |
|---|---|
| name | Ad; zorunlu Bu hedef için benzersiz bir ad. | 
| toolchains | Dizeleri etiketlerle eşleyen sözlük; yapılandırılamaz; zorunlu"<cpu>" veya "<cpu>|<compiler>" dizelerinden cc_toolchainetiketine giden bir harita. Yalnızca--cpuBazel'e iletildiğinde "<cpu>", hem--cpuhem de--compilerBazel'e iletildiğinde ise "<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",
            },
          )
           |