C / C++ Kuralları

Sorun bildir Kaynağı görüntüle Nightly · 7.4 .

Kurallar

cc_binary

Kural kaynağını görüntüle
cc_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çin strip -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 []'dir.

İkili hedefe bağlanacak diğer kitaplıkların listesi.

Bunlar cc_library veya objc_library hedefleri olabilir.

srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kodu) veya üretilmiş C/C++ kaynak ve üst bilgi dosyalarıdır.

Tüm .cc, .c ve .cpp dosyaları derlenecek. Bunlar oluşturulmuş dosyalar olabilir: Adlandırılmış bir dosya başka bir kuralın outs bölümündeyse bu kural otomatik olarak diğer kurala bağlı olur.

.h dosyası derlenmez ancak bu kuraldaki kaynaklar tarafından dahil edilebilir. Hem .cc hem de .h dosyaları, bu srcs dosyalarında veya deps bağımsız değişkeninde listelenen herhangi bir kuralın hdrs dosyasında listelenen üstbilgileri doğrudan içerebilir.

Tüm #included dosyalarından bu kuralın srcs özelliğinde veya referans verilen cc_library() dosyalarının hdrs özelliğinde bahsedilmelidir. Önerilen stil, bir kütüphaneyle ilişkili üstbilgilerin söz konusu kütüphanenin hdrs özelliğinde, bu kuralın kaynaklarıyla ilişkili diğer üstbilgilerin ise srcs özelliğinde listelenmesini içerir. Daha ayrıntılı bilgi için "Başlık dahil etme kontrolü" bölümüne bakın.

Bir kuralın adı srcs içindeyse bu kural otomatik olarak söz konusu kurala bağlıdır. Adlandırılmış kuralın outs'leri C veya C++ kaynak dosyalarıysa bu kuralda derlenirler. Kitaplık dosyalarıysa birbirine bağlanırlar.

İzin verilen srcs dosya türleri:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ başlık dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C önişleyicili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağla" kitaplığı: .lo, .pic.lo
  • Paylaşılan kitaplık, sürümü olan veya olmayan: .so, .so.version
  • Nesne dosyası: .o, .pic.o

...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 []'dir.

Bu dosyaları C++ bağlayıcı komutuna iletin.

Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir.

copts

Dize listesi; varsayılan değer []'tir.

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu özellikteki her dize, ikili hedef derlenmeden önce COPTS alanına belirtilen sırada eklenir. İşaretler yalnızca bu hedefin derlenmesi için geçerlidir, bağımlılıklarının derlenmesi için geçerli değildir. Bu nedenle, başka bir yere dahil edilen başlık dosyalarına dikkat edin. Tüm yollar, mevcut pakete değil, çalışma alanına göre olmalıdır.

Pakette özellik no_copts_tokenization tanımlanmışsa Bourne kabuğu jetonu yalnızca tek bir "Make" değişkeninden oluşan dizeler için geçerlidir.

defines

Dize listesi; varsayılan değer []'tir.

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeni yerine koyma ve Bourne kabuğu dize oluşturma işlemine tabidir. Tek bir Bourne kabuğu jetonundan oluşması gereken her dize, -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: []

Derleme satırına eklenecek dizin dosyalarının listesi.

"Değişken yap" yerine koyma işlemine tabidir. Her dize, -isystem ile başa eklenir ve COPTS'a eklenir. COPTS'tan farklı olarak bu işaretler bu kural ve bu kurala bağlı her kural için eklenir. (Not: Bu, bağlı olduğu kurallar değildir.) Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS alanına "-I" işaretleri ekleyin.

Başlıklar, src'lere veya hdrs'lara eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar kullanılamaz.

Etiket; varsayılan değer "@bazel_tools//tools/cpp:link_extra_lib"'dir.

Ekstra kitaplıkların bağlanmasını kontrol edin.

Varsayılan olarak, C++ ikili programları //tools/cpp:link_extra_lib ile bağlantılıdır. Bu varsayılan olarak etiket işaretine (//tools/cpp:link_extra_libs) bağlıdır. İşaretçi ayarlanmadığında bu kitaplık varsayılan olarak boştur. Etiket işaretini ayarlamak, zayıf semboller için geçersiz kılma işlemleri, paylaşılan kitaplık işlevleri için müdahaleciler veya özel çalışma zamanı kitaplıkları (malloc değişimleri için malloc veya --custom_malloc'yi tercih edin) gibi isteğe bağlı bağımlılıkların bağlanmasına olanak tanır. Bu özelliği None olarak ayarlamak bu davranışı devre dışı bırakır.

linkopts

Dize listesi; varsayılan değer []'tir.

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Yap" değişkeni değişikliğine, Bourne kabuk belirteçleştirmesine ve etiket genişletmesine tabi. Bu özellikteki her dize, ikili hedef bağlanmadan önce LINKOPTS'e eklenir.

Bu listedeki $ veya - ile başlamayan her öğenin, deps'deki bir hedefin etiketi olduğu varsayılır. Söz konusu hedef tarafından oluşturulan dosyaların listesi, bağlayıcı seçeneklerine eklenir. Etiket geçersizse veya deps içinde beyan edilmemişse hata bildirilir.

linkshared

Boole; yapılandırılamaz; varsayılan değer False'dir.

Paylaşılan kitaplık oluşturun. Bu özelliği etkinleştirmek için kuralınıza linkshared=True özelliğini ekleyin. Bu seçenek varsayılan olarak kapalıdır.

Bu işaretin varlığı, -shared işaretinin gcc ile bağlantı kurduğunu ve elde edilen ortak kitaplığın örneğin bir Java programına yüklenmesi için uygun olduğunu gösterir. Ancak cc_binary kuralıyla oluşturulan paylaşılan kitaplıkların yalnızca diğer programlar tarafından manuel olarak yüklendiği varsayıldığından, derleme amacıyla hiçbir zaman bağımlı ikili dosyaya bağlanmaz. Bu nedenle, cc_library kuralının yerine geçmez. Ölçeklenebilirlik açısından bu yaklaşımdan tamamen kaçınmanızı ve java_library ürününün bunun yerine cc_library kurallarına bağlı olmasına izin vermenizi öneririz.

Hem linkopts=['-static'] hem de linkshared=True belirtirseniz tamamen bağımsız tek bir birim elde edersiniz. Hem linkstatic=True hem de linkshared=True'yi belirtirseniz çoğunlukla kendi kendine yeten tek bir birim elde edersiniz.

linkstatic

Boole; varsayılan değer True'tir

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 cc_binary için açık, geri kalanı için kapalıdır.

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 .so yerine .a içinde bağlantı vermesini bildirir. Statik kitaplığı olmayan kitaplıklar gibi bazı sistem kitaplıkları da dinamik olarak bağlanmaya devam edebilir. Bu nedenle, ortaya çıkan yürütülebilir dosya yine dinamik olarak bağlanır ve dolayısıyla yalnızca çoğunlukla statiktir.

Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:

  • Her şeyin statik olarak bağlandığı fully_static_link özelliğiyle STATIC (ör. "gcc -static foo.o libbar.a libbaz.a -lm").
    Bu mod, features özelliğinde fully_static_link belirtilerek etkinleştirilir.
  • STATIC: Tüm kullanıcı kitaplıklarının statik olarak bağlandığı (statik bir sürüm varsa) ancak sistem kitaplıklarının (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlandığı (ör. "gcc foo.o libfoo.a libbaz.a -lm") moddur.
    Bu mod, linkstatic=True belirtilerek etkinleştirilir.
  • Tüm kitaplıkların dinamik olarak bağlandığı DYNAMIC (dinamik sürüm mevcutsa), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralında kullanılıyorsa farklı bir anlama sahiptir. C++ kitaplıklarında linkstatic=True, yalnızca statik bağlantıya izin verildiğini gösterir. Bu nedenle .so oluşturulmaz. linkstatic=False, statik kitaplıkların oluşturulmasını engellemez. Bu özellik, dinamik kitaplıkların oluşturulmasını kontrol etmek için tasarlanmıştır.

linkstatic=False ise derleme aracı, *.runfiles alanındaki bağımlı paylaşılan kitaplıklara sembol bağlantıları oluşturur.

local_defines

Dize listesi; varsayılan değer: []

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeni yerine koyma ve Bourne kabuğu dize oluşturma işlemine tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dizenin başına -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 "@bazel_tools//tools/cpp:malloc"'dir.

malloc'a olan varsayılan bağımlılığı geçersiz kılın.

Varsayılan olarak C++ ikili dosyaları //tools/cpp:malloc ile bağlanır. Bu kitaplık boş olduğundan ikili dosya sonunda libc malloc'i kullanır. Bu etiket bir cc_library'ye atıfta bulunmalıdır. Derleme C++ dışı bir kural içinse bu seçeneğin hiçbir etkisi olmaz. linkshared=True belirtilirse bu özelliğin değeri yoksayılır.

nocopts

Dize; varsayılan değer ""'tir

C++ derleme komutundan eşleşme seçeneklerini kaldırın. "Yap" değişkeni değişikliğine tabidir. Bu özelliğin değeri normal ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden var olan tüm 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 -1'tür

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile, derleme bilgilerini her zaman ikili programda damgalayın. İkili dosya ve ona bağlı tüm yayın sonrası işlemler için uzaktan önbelleğe alma işlemini potansiyel olarak sonlandırdığından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işareti tarafından kontrol edilir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

win_def_file

Etiket; varsayılan değer None

Bağlayıcıya iletilecek Windows DEF dosyası.

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öster
cc_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 []

Hedefin bağımlı olduğu diğer kitaplıkların listesi. 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 []

Bu önceden derlenmiş kitaplık tarafından yayınlanan ve kaynaklar tarafından bağımlı kurallara doğrudan dahil edilecek başlık dosyalarının listesi.

Boole; varsayılan değer False'tir

1 ise bu C++ önceden derlenmiş kitaplığına bağlı olan (doğrudan veya dolaylı olarak) herhangi bir ikili program, statik kitaplıkta arşivlenen tüm nesne dosyalarına, bazıları ikili program tarafından başvurulan hiçbir simge içermese bile bağlantı verir. Bu, kodunuz ikili programdaki kod tarafından açıkça çağrılmıyorsa (ör. kodunuz bir hizmet tarafından sağlanan geri çağırma işlevini almak için kaydoluyorsa) kullanışlıdır.

alwayslink, Windows'daki VS 2017 ile çalışmıyorsa bunun nedeni bilinen bir sorundur. Lütfen VS 2017'nizi en son sürüme yükseltin.

interface_library

Etiket; varsayılan değer None'dir.

Paylaşılan kitaplığı bağlamak için tek bir arayüz kitaplığı.

İzin verilen dosya türleri: .ifso, .tbd, .lib, .so veya .dylib

shared_library

Etiket; varsayılan değer None'dir.

Tek bir önceden derlenmiş paylaşılan kitaplık. Bazel, çalışma zamanında kendisine bağlı olan ikili dosyanın bu ikili dosyaya erişebildiğinden emin olur.

İzin verilen dosya türleri: .so, .dll veya .dylib

static_library

Etiket; varsayılan değer None

Tek bir önceden derlenmiş statik kitaplık.

İzin verilen dosya türleri: .a, .pic.a veya .lib

system_provided

Boole; varsayılan değer False'tir

1 ise çalışma zamanında gereken paylaşılan kitaplığın sistem tarafından sağlandığını gösterir. Bu durumda, interface_library belirtilmeli ve shared_library boş bırakılmalıdır.

cc_library

Kural kaynağını görüntüle
cc_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.hbar.h
foo.ccfoo.h bar.h
bar.hbar-impl.h baz.h
bar-impl.hbar.h baz.h
bar.ccbar.h bar-impl.h baz.h
baz.hbaz-impl.h
baz-impl.hbaz.h
baz.ccbaz.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 []

İkili hedefe bağlanacak diğer kitaplıkların listesi.

Bunlar cc_library veya objc_library hedefleri olabilir.

srcs

Etiket listesi; varsayılan []

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kodu) veya üretilmiş C/C++ kaynak ve üst bilgi dosyalarıdır.

Tüm .cc, .c ve .cpp dosyaları derlenecek. Bunlar oluşturulmuş dosyalar olabilir: Adlandırılmış bir dosya başka bir kuralın outs bölümündeyse bu kural otomatik olarak diğer kurala bağlı olur.

.h dosyası derlenmez ancak bu kuraldaki kaynaklar tarafından dahil edilebilir. Hem .cc hem de .h dosyaları, bu srcs dosyalarında veya deps bağımsız değişkeninde listelenen herhangi bir kuralın hdrs dosyasında listelenen üstbilgileri doğrudan içerebilir.

Tüm #included dosyaları, bu kuralın srcs özelliğinde veya referans verilen cc_library()'lerin hdrs özelliğinde belirtilmelidir. Önerilen stil, bir kitaplıkla ilişkilendirilmiş başlıkların söz konusu kitaplığın hdrs özelliğinde listelenmesi ve bu kuralın kaynaklarıyla ilişkili diğer tüm başlıkların srcs politikasında listelenmesi içindir. Daha ayrıntılı bilgi için "Başlık dahil etme kontrolü" bölümüne bakın.

Bir kuralın adı srcs içindeyse bu kural otomatik olarak söz konusu kurala bağlıdır. Adlandırılmış kuralın outs C veya C++ kaynak dosyalarıysa bu kuralda derlenir; kitaplık dosyalarıysa bağlanır.

İzin verilen srcs dosya türleri:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ başlık dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C önişleyicili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağla" kitaplığı: .lo, .pic.lo
  • Paylaşılan kitaplık, sürümü olan veya olmayan: .so, .so.version
  • Nesne dosyası: .o, .pic.o

...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 []

Kaynaklar tarafından bağımlı kurallara doğrudan dahil edilmek üzere bu kitaplık tarafından yayınlanan başlık dosyalarının listesi.

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 srcs özelliğinde listelenmelidir. Daha ayrıntılı bilgi için "Başlık dahil etme kontrolünü

additional_compiler_inputs

Etiketler listesi; varsayılan değer []'dir.

Derleyici komut satırına iletmek isteyebileceğiniz ek dosyalar (ör. temizleyici yoksayma listeleri). Burada belirtilen dosyalar, daha sonra $(location) işleviyle copt'lerde kullanılabilir.
additional_linker_inputs

Etiketler listesi; varsayılan değer []'dir.

Bu dosyaları C++ bağlayıcı komutuna iletin.

Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir.

Boole; varsayılan değer False

1 ise bu C++ kitaplığına (doğrudan veya dolaylı olarak) bağlı olan herhangi bir ikili program, bazıları ikili program tarafından başvurulan semboller içermese bile 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 seçenekleri C++ derleme komutuna ekleyin. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu özellikteki her dize, ikili hedef derlenmeden önce COPTS alanına belirtilen sırada eklenir. İşaretler yalnızca bu hedefin derlenmesi için geçerlidir, bağımlılıklarının derlenmesi için geçerli değildir. Bu nedenle, başka bir yere dahil edilen başlık dosyalarına dikkat edin. Tüm yollar mevcut paketle değil, çalışma alanına bağlı olmalıdır.

Pakette özellik no_copts_tokenization tanımlanmışsa Bourne kabuğu jetonu yalnızca tek bir "Make" değişkeninden oluşan dizeler için geçerlidir.

defines

Dize listesi; varsayılan değer []'tir.

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeni yerine koyma ve Bourne kabuğu dize oluşturma işlemine tabidir. Tek bir Bourne kabuk jetonundan oluşması gereken her dizenin başına -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 []'dir.

Kitaplık hedefine bağlı diğer kitaplıkların listesi. 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 --experimental_cc_implementation_deps işaretiyle korunur.

include_prefix

Dize; varsayılan değer ""

Bu kuralın üstbilgilerinin yollarına eklenecek ön ek.

Bu kuralın hdrs özelliğindeki üstbilgilerin erişilebilir olması için at, bu özelliğin değerinin depoya göre yollarına eklenmiş olması gerekir.

Bu ön ek eklenmeden önce strip_include_prefix özelliğindeki ön ek kaldırılır.

includes

Dize listesi; varsayılan değer: []

Derleme satırına eklenecek dahil dizinlerinin listesi.

"Değişken yap" yerine koyma işlemine tabidir. Her dize, -isystem ile başa eklenir ve COPTS'a eklenir. COPTS'nin aksine, bu işaretler bu kural ve ona bağlı her kural için eklenir. (Not: Bu, bağlı olduğu kurallar değildir.) Bunun geniş kapsamlı etkileri olabileceğinden çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS öğesine "-I" işaretleri ekleyin.

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 []'tir.

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Make" değişkeni yerine koyma, Bourne kabuğu dize parçalarına ayırma ve etiket genişletme işlemlerine tabidir. Bu özellikteki her dize, ikili hedef bağlanmadan önce LINKOPTS'e eklenir.

Bu listedeki $ veya - ile başlamayan her öğenin, deps'deki bir hedefin etiketi olduğu varsayılır. Bu hedef tarafından oluşturulan dosyaların listesi, bağlayıcı seçeneklerine eklenir. Etiket geçersizse veya deps içinde beyan edilmemişse hata bildirilir.

linkstamp

Etiket; varsayılan değer None'dir.

Belirtilen C++ kaynak dosyasını aynı anda derleyip nihai ikili dosyaya bağlar. Bu hile, zaman damgası bilgilerini ikili dosyalara eklemek için gereklidir. Kaynak dosyayı normal şekilde bir nesne dosyasına derleyirsek zaman damgası yanlış olur. Bir linkstamp derlemesi, belirli bir derleyici işareti grubunu içeremez. Bu nedenle, belirli bir başlığa, derleyici seçeneğine veya başka bir derleme değişkenine bağlı olmamalıdır. Bu seçeneğe yalnızca base paketinde ihtiyaç duyulur.
linkstatic

Boole; varsayılan değer False'tir

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 cc_binary için açık, geri kalanı için kapalıdır.

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 .so yerine .a içinde bağlantı vermesini bildirir. Statik kitaplığı olmayan kitaplıklar gibi bazı sistem kitaplıkları da dinamik olarak bağlanmaya devam edebilir. Bu nedenle, ortaya çıkan yürütülebilir dosya yine dinamik olarak bağlanır ve dolayısıyla yalnızca çoğunlukla statiktir.

Bir yürütülebilir dosyayı bağlamanın üç farklı yolu vardır:

  • Her şeyin statik olarak bağlandığı fully_static_link özelliğiyle STATIC (ör. "gcc -static foo.o libbar.a libbaz.a -lm").
    Bu mod, features özelliğinde fully_static_link belirtilerek etkinleştirilir.
  • Tüm kullanıcı kitaplıklarının statik olarak bağlandığı (statik sürüm varsa) ancak sistem kitaplıklarının (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlandığı STATIC.Ör. "gcc foo.o libfoo.a libbaz.a -lm".
    Bu mod, linkstatic=True belirtilerek etkinleştirilir.
  • Tüm kitaplıkların dinamik olarak bağlandığı DYNAMIC (dinamik bir sürüm mevcutsa) örn. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod, linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralında kullanılıyorsa farklı bir anlama sahiptir. C++ kitaplıklarında linkstatic=True, yalnızca statik bağlantıya izin verildiğini gösterir. Bu nedenle .so oluşturulmaz. linkstatic=False, statik kitaplıkların oluşturulmasını engellemez. Bu özellik, dinamik kitaplıkların oluşturulmasını kontrol etmek için tasarlanmıştır.

linkstatic=False ise derleme aracı, *.runfiles alanındaki bağımlı paylaşılan kitaplıklara sembol bağlantıları oluşturur.

local_defines

Dize listesi; varsayılan değer: []

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeni yerine koyma ve Bourne kabuğu dize oluşturma işlemine tabidir. Tek bir Bourne kabuğu jetonundan oluşması gereken her dize, -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 ""

Eşleşen seçenekleri C++ derleme komutundan kaldırın. "Make" değişkeni yerine geçmeye tabidir. Bu özelliğin değeri normal ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden var olan tüm 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 ""'tir

Bu kuralın üstbilgilerinin yollarından kaldırılacak ön ek.

Ayarlandığında, bu kuralın hdrs özelliğindeki üstbilgilere, bu ön ek kaldırılmış şekildeki yollarında erişilebilir.

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.

include_prefix özelliğindeki ön ek, bu ön ek kaldırıldıktan sonra eklenir.

textual_hdrs

Etiketler listesi; varsayılan değer []'dir.

Bu kitaplık tarafından yayınlanan ve bağımlı kurallarda kaynaklar tarafından metinsel olarak dahil edilecek başlık dosyalarının listesi.

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 None'dir.

Bağlantı oluşturucuya iletilecek Windows DEF dosyası.

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üle
cc_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 []

C++ kodu oluşturmak için proto_library kurallarının listesi.

cc_shared_library

Kural kaynağını görüntüle
cc_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. bazbar_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.

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 []'dir.

Tam olarak arşivlendikten sonra koşulsuz olarak paylaşılan kitaplığa statik olarak bağlanacak üst düzey kitaplıklar.

Bu doğrudan bağımlılıkların geçişli kitaplık bağımlılıkları, dynamic_deps'da bir cc_shared_library tarafından bağlanmadığı sürece bu paylaşılan kitaplığa bağlanır.

Analiz sırasında kural uygulaması, birden fazla cc_shared_libraries aynı hedefleri dışa aktardığında hata vermek için deps içinde listelenen tüm hedefleri paylaşılan kitaplık tarafından dışa aktarılmış olarak kabul eder. Kural uygulaması, hangi sembollerin paylaşılan nesne tarafından dışa aktarılması gerektiği konusunda bağlayıcıyı bilgilendirmez. Kullanıcı, kaynak koddaki bağlayıcı komut dosyaları veya görünürlük beyanları aracılığıyla bu konuyla ilgilenmelidir.

Uygulama, aynı kitaplık birden fazla cc_shared_library öğesine statik olarak bağlandığında da hataları tetikler. Bu durum, "LINKABLE_MORE_THAN_ONCE" öğesini cc_library.tags öğesine ekleyerek veya "cc_library" öğesini paylaşılan kitaplıklardan birinin dışa aktarımı olarak listeleyerek önlenebilir. Böylece, bir kitaplık diğerinin dynamic_dep öğesi haline getirilebilir.

additional_linker_inputs

Etiketler listesi; varsayılan değer []'dir.

Bağlantılayıcıya iletmek istediğiniz ek dosyalar (ör. bağlantılayıcı komut dosyaları). Bağlantılayıcının bu dosyayı bilmesi için ihtiyaç duyduğu tüm bağlantılayıcı işaretlerini ayrı olarak iletmeniz gerekir. Bunu user_link_flags özelliği aracılığıyla yapabilirsiniz.
dynamic_deps

Etiketler listesi; varsayılan değer []'dir.

Bunlar, mevcut hedefin bağlı olduğu diğer cc_shared_library bağımlılıklarıdır.

cc_shared_library uygulaması, geçişli deps içindeki hangi cc_libraries'lerin farklı bir cc_shared_library tarafından sağlandığı için bağlanmaması gerektiğine karar vermek üzere dynamic_deps listesini (geçişli olarak, yani mevcut hedefin dynamic_deps'sinin dynamic_deps'si de dahil) kullanır.

exports_filter

Dize listesi; varsayılan değer []'tir.

Bu özellik, mevcut paylaşılan kitaplık tarafından dışa aktarıldığı iddia edilen hedeflerin listesini içerir.

Herhangi bir deps hedefinin paylaşılan kitaplık tarafından zaten dışa aktarıldığı anlaşılıyor. Bu özellik, paylaşılan kitaplık tarafından dışa aktarılan ancak deps'ün geçişli bağımlılıkları olan tüm hedefleri listelemek için kullanılmalıdır.

Bu özelliğin bu hedeflere bir bağımlılık kenarı eklemediğini unutmayın. Bağımlılık kenarı, bunun yerine deps tarafından oluşturulmalıdır. Bu özellikteki girişler yalnızca dizedir. Bu özelliğe bir hedef yerleştirilirken bunun, paylaşılan kitaplığın ilgili hedefteki simgeleri dışa aktardığı iddiası olarak kabul edildiğini unutmayın. cc_shared_library mantığı, bağlayıcıya hangi sembollerin dışa aktarılması gerektiğini söylemez.

Aşağıdaki söz dizimine izin verilir:

foo/BUILD'deki tüm hedefleri hesaba katmak için //foo:__package__

//foo:__subpackages__, foo/BUILD veya foo/ altındaki başka bir paketteki (ör. foo/bar/BUILD) tüm hedefleri hesaba katar.

shared_lib_name

Dize; varsayılan değer ""'tir

Varsayılan olarak cc_shared_library, paylaşılan kitaplık çıkış dosyası için hedefin adına ve platforma göre bir ad kullanır. Buna bir uzantı ve bazen bir ön ek dahildir. Bazen varsayılan adı istemeyebilirsiniz. Örneğin, Python için C++ paylaşılan kitaplıklarını yüklerken varsayılan lib* ön eki genellikle istenmez. Bu durumda, özel bir ad seçmek için bu özelliği kullanabilirsiniz.

Dize listesi; varsayılan değer []'tir.

Bağlayıcıya iletmek isteyebileceğiniz tüm ek işaretler. Örneğin, bağlayıcının additional_linker_inputs aracılığıyla iletilen bir bağlayıcı komut dosyasını bilmesi için şunu kullanabilirsiniz:
         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 None

Bağlantı oluşturucuya iletilecek Windows DEF dosyası.

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üleme
cc_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 ve symbol_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 []

Tüm geçişli bağımlılıkları dahil olmak üzere statik bir kitaplıkta birleştirilecek hedeflerin listesi.

Nesne dosyası sağlamayan bağımlılıklar statik kitaplığa dahil edilmez ancak etiketleri, linkdeps çıkış grubu tarafından sağlanan dosyada toplanır.

fdo_prefetch_hints

Kural kaynağını görüntüle
fdo_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 None'dir.

İpuçları profilinin etiketi. İpuçları dosyası .afdo uzantısına sahiptir. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir.

fdo_profile

Kural kaynağını görüntüle
fdo_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 ""'tir

FDO profilinin mutlak yolu. FDO dosyası yalnızca .afdo uzantısına sahip olabilir.
profile

Etiket; varsayılan değer None'dir.

FDO profilinin etiketi veya onu oluşturan bir kural. FDO dosyasının şu uzantılardan biri olabilir: dizine eklenmemiş LLVM profili için .profraw, dizine eklenmiş LLVM profili için .profdata, LLVM profraw profili içeren .zip, AutoFDO profili için .afdo, XBinary profili için .xfdo. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir.
proto_profile

Etiket; varsayılan değer None'dir.

Protobuf profilinin etiketi.

memprof_profile

Kural kaynağını görüntüle
memprof_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 ""'tir

MEMPROF profilinin mutlak yolu. Dosya yalnızca .profdata veya .zip uzantısına sahip olabilir (zip dosyasının bir memprof.profdata dosyası içermesi gerekir).
profile

Etiket; varsayılan değer None

MEMPROF profilinin etiketi. Profilin .profdata uzantısına (dizine eklenen/sembolleştirilmiş bir memprof profili için) veya memprof.profdata dosyası içeren bir zip dosyası için .zip uzantısına sahip olması gerekir. Etiket, fdo_absolute_path_profile kuralını da işaret edebilir.

propeller_optimize

Kural kaynağını görüntüle
propeller_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 None'dir.

Bağlantı işlemine iletilen profilin etiketi. Bu dosyanın uzantısı .txt olmalıdır.

cc_test

Kural kaynağını görüntüle
cc_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 []'dir.

İkili hedefe bağlanacak diğer kitaplıkların listesi.

Bunlar, cc_library veya objc_library hedef olabilir.

srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen C ve C++ dosyalarının listesi. Bunlar, oluşturulmamış (normal kaynak kod) veya oluşturulmuş C/C++ kaynak ve başlık dosyalardır.

Tüm .cc, .c ve .cpp dosyaları derlenecek. Bunlar oluşturulmuş dosyalar olabilir: Adlandırılmış bir dosya başka bir kuralın outs bölümündeyse bu kural otomatik olarak diğer kurala bağlı olur.

.h dosyası derlenmez ancak bu kuraldaki kaynaklar tarafından dahil edilebilir. Hem .cc hem de .h dosyaları, bu srcs dosyalarında veya deps bağımsız değişkeninde listelenen herhangi bir kuralın hdrs dosyasında listelenen üstbilgileri doğrudan içerebilir.

Tüm #included dosyalarından bu kuralın srcs özelliğinde veya referans verilen cc_library() dosyalarının hdrs özelliğinde bahsedilmelidir. Önerilen stil, bir kitaplıkla ilişkilendirilmiş başlıkların söz konusu kitaplığın hdrs özelliğinde listelenmesi ve bu kuralın kaynaklarıyla ilişkili diğer tüm başlıkların srcs politikasında listelenmesi içindir. Daha ayrıntılı bilgi için "Başlık dahil etme kontrolü" bölümüne bakın.

Bir kuralın adı srcs içindeyse bu kural otomatik olarak ona bağlıdır. Adlandırılmış kuralın outs C veya C++ kaynak dosyalarıysa bu kuralda derlenir; kitaplık dosyalarıysa bağlanır.

İzin verilen srcs dosya türleri:

  • C ve C++ kaynak dosyaları: .c, .cc, .cpp, .cxx, .c++, .C
  • C ve C++ başlık dosyaları: .h, .hh, .hpp, .hxx, .inc, .inl, .H
  • C önişleyicili derleyici: .S
  • Arşiv: .a, .pic.a
  • "Her zaman bağla" kitaplığı: .lo, .pic.lo
  • Paylaşılan kitaplık, sürümü olan veya olmayan: .so, .so.version
  • Nesne dosyası: .o, .pic.o

...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 []'dir.

Bu dosyaları C++ bağlayıcı komutuna iletin.

Örneğin, derlenmiş Windows .res dosyaları, ikili hedefe yerleştirilmek üzere burada sağlanabilir.

copts

Dize listesi; varsayılan değer []'tir.

Bu seçenekleri C++ derleme komutuna ekleyin. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu özellikteki her dize, ikili hedef derlenmeden önce COPTS alanına belirtilen sırada eklenir. İşaretler yalnızca bu hedefin derlenmesi için geçerlidir, bağımlılıklarının derlenmesi için geçerli değildir. Bu nedenle, başka bir yere dahil edilen başlık dosyalarına dikkat edin. Tüm yollar, mevcut pakete değil, çalışma alanına göre olmalıdır.

Pakette özellik no_copts_tokenization tanımlanmışsa Bourne kabuğu jetonu yalnızca tek bir "Make" değişkeninden oluşan dizeler için geçerlidir.

defines

Dize listesi; varsayılan değer []'tir.

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeninin değiştirilmesine ve Bourne kabuk belirtkelemeye tabidir. Tek bir Bourne kabuğu jetonundan oluşması gereken her dize, -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: []

Derleme satırına eklenecek dizin dosyalarının listesi.

"Değişken yap" yerine koyma işlemine tabidir. Her dize, -isystem ile başa eklenir ve COPTS'a eklenir. COPTS'tan farklı olarak bu işaretler bu kural ve bu kurala bağlı her kural için eklenir. (Not: Bu kuralların bağlı olduğu kurallar değildir.) Geniş kapsamlı etkileri olabileceği için çok dikkatli olun. Şüpheye düştüğünüzde bunun yerine COPTS alanına "-I" işaretleri ekleyin.

Üstbilgiler srcs veya hdrs'ye eklenmelidir. Aksi takdirde, derleme korumalı alana alındığında (varsayılan) bağımlı kurallar tarafından kullanılamaz.

Etiket; varsayılan değer "@bazel_tools//tools/cpp:link_extra_lib"'dir.

Ekstra kitaplıkların bağlanmasını kontrol edin.

Varsayılan olarak, C++ ikili programları //tools/cpp:link_extra_lib ile bağlantılıdır. Bu varsayılan olarak etiket işaretine (//tools/cpp:link_extra_libs) bağlıdır. İşaretçi ayarlanmadığında bu kitaplık varsayılan olarak boştur. Etiket işaretini ayarlamak, zayıf semboller için geçersiz kılma işlemleri, paylaşılan kitaplık işlevleri için müdahaleciler veya özel çalışma zamanı kitaplıkları (malloc değişimleri için malloc veya --custom_malloc'yi tercih edin) gibi isteğe bağlı bağımlılıkların bağlanmasına olanak tanır. Bu özelliği None olarak ayarlamak bu davranışı devre dışı bırakır.

linkopts

Dize listesi; varsayılan değer []'tir.

Bu işaretleri C++ bağlayıcı komutuna ekleyin. "Make" değişkeni yerine koyma, Bourne kabuğu dize parçalarına ayırma ve etiket genişletme işlemlerine tabidir. Bu özellikteki her dize, ikili hedef bağlanmadan önce LINKOPTS'e eklenir.

Bu listedeki $ veya - ile başlamayan her öğenin, deps'deki bir hedefin etiketi olduğu varsayılır. Söz konusu hedef tarafından oluşturulan dosyaların listesi, bağlayıcı seçeneklerine eklenir. Etiket geçersizse veya deps içinde bildirilmezse hata bildirilir.

linkstatic

Boole; varsayılan değer False'tir

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 cc_binary için açık, geri kalanı için kapalıdır.

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 .so yerine .a içinde bağlantı vermesini bildirir. Statik kitaplığı olmayan kitaplıklar gibi bazı sistem kitaplıkları da dinamik olarak bağlanmaya devam edebilir. Bu nedenle, ortaya çıkan yürütülebilir dosya yine dinamik olarak bağlanır ve dolayısıyla yalnızca çoğunlukla statiktir.

Yürütülebilir bir dosyayı bağlamanın üç farklı yolu vardır:

  • Her şeyin statik olarak bağlandığı full_static_link özelliğine sahip STATIC; ör. "gcc -static foo.o libbar.a libbaz.a -lm".
    Bu mod, features özelliğinde fully_static_link değeri belirtilerek etkinleştirilir.
  • STATIC: Tüm kullanıcı kitaplıklarının statik olarak bağlandığı (statik bir sürüm varsa) ancak sistem kitaplıklarının (C/C++ çalışma zamanı kitaplıkları hariç) dinamik olarak bağlandığı (ör. "gcc foo.o libfoo.a libbaz.a -lm") moddur.
    Bu mod, linkstatic=True belirtilerek etkinleştirilir.
  • Tüm kitaplıkların dinamik olarak bağlandığı DYNAMIC (dinamik sürüm mevcutsa), ör. "gcc foo.o libfoo.so libbaz.so -lm".
    Bu mod linkstatic=False belirtilerek etkinleştirilir.

linkstatic özelliği, cc_library() kuralında kullanılıyorsa farklı bir anlama sahiptir. C++ kitaplıklarında linkstatic=True, yalnızca statik bağlantıya izin verildiğini gösterir. Bu nedenle .so oluşturulmaz. linkstatic=False, statik kitaplıkların oluşturulmasını engellemez. Bu özellik, dinamik kitaplıkların oluşturulmasını kontrol etmek için tasarlanmıştır.

linkstatic=False ise derleme aracı, *.runfiles alanındaki bağımlı paylaşılan kitaplıklara sembol bağlantıları oluşturur.

local_defines

Dize listesi; varsayılan değer: []

Derleme satırına eklenecek tanımlar listesi. "Make" değişkeni yerine koyma ve Bourne kabuğu dize oluşturma işlemine tabidir. Tek bir Bourne kabuğu jetonundan oluşması gereken her dize, -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 "@bazel_tools//tools/cpp:malloc"

malloc'a olan varsayılan bağımlılığı geçersiz kılın.

Varsayılan olarak C++ ikili dosyaları //tools/cpp:malloc ile bağlanır. Bu kitaplık boş olduğundan ikili dosya sonunda libc malloc'i kullanır. Bu etiket bir cc_library'ye atıfta bulunmalıdır. Derleme C++ dışı bir kural içinse bu seçeneğin hiçbir etkisi olmaz. linkshared=True belirtilirse bu özelliğin değeri yoksayılır.

nocopts

Dize; varsayılan değer ""'tir

Eşleşen seçenekleri C++ derleme komutundan kaldırın. "Make" değişkeni yerine geçmeye tabidir. Bu özelliğin değeri normal ifade olarak yorumlanır. Bu normal ifadeyle eşleşen önceden mevcut tüm 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 0'tür

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili dosyaya damgalayın. İkili dosya ve ona bağlı tüm yayın sonrası işlemler için uzaktan önbelleğe alma işlemini potansiyel olarak sonlandırdığından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

win_def_file

Etiket; varsayılan değer None'dir.

Bağlantı oluşturucuya iletilecek Windows DEF dosyası.

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üle
cc_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).

cc_toolchain.files, C++ araç zincirini kullanan tüm Starlark kuralları tarafından kullanılan bu içeriği barındırır.

ar_files

Etiket; varsayılan değer None'dir.

Arşivleme işlemleri için gereken tüm cc_toolchain yapılarının koleksiyonu.

as_files

Etiket; varsayılan değer None'dir.

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 None

Giriş keşfinin desteklendiği durumlarda (şu anda yalnızca Google) derleme işlemleri için gereken tüm cc_toolchain yapılarını toplama
coverage_files

Etiket; varsayılan değer None

Kapsam işlemleri için gereken tüm cc_toolchain yapılarını içeren koleksiyon. Belirtilmezse all_files kullanılır.
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 None'dir.

C++ çalışma zamanı kitaplığı için dinamik kitaplık yapısı (ör. libstdc++.so).

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 True'tir

Geçiş olmaması (yani varsayılan olarak hedef platform) yerine tüm dosya girişlerini yönetici platformu için cc_toolchain biçiminde derlemek için bu değeri True olarak ayarlayın.
libc_top

Etiket; varsayılan değer None'dir.

Derleme/bağlama işlemlerine giriş olarak iletilen libc yapıları koleksiyonu.
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 None'dir.

Modüler derlemeler için kullanılacak modül haritası yapıları.
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 None'dir.

C++ çalışma zamanı kitaplığı için statik kitaplık yapısı (ör. libstdc++.a).

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 False'tir

cc_toolchain, başlık ayrıştırma işlemlerini destekliyorsa Doğru değerine ayarlayın.
supports_param_files

Boole; varsayılan değer True'tir

cc_toolchain, bağlantı işlemleri için param dosyalarının kullanılmasını desteklediğinde bu değeri True olarak ayarlayın.
toolchain_config

Etiket; zorunlu

cc_toolchain_config_info sağlayan kuralın etiketi.
toolchain_identifier

Dize; yapılandırılamaz; varsayılan değer ""

Bu cc_toolchain'i ilgili crosstool_config.toolchain ile eşleştirmek için kullanılan tanımlayıcı.

#5380 sorunu düzeltilene kadar cc_toolchain ile CROSSTOOL.toolchain'ı ilişkilendirmenin önerilen yolu budur. Bu özellik, toolchain_config özelliğiyle (#5380) değiştirilecek.

cc_toolchain_suite

Kural kaynağını görüntüle
cc_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>" dizelerini cc_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",
            },
          )